Inicio › Toolset Professional Support › [Resuelto] Kann Toolset rechnen?
This is the technical support forum for Toolset - a suite of plugins for developing WordPress sites without writing PHP.
Everyone can read this forum, but only Toolset clients can post in it. Toolset support works 6 days per week, 19 hours per day.
Sun | Mon | Tue | Wed | Thu | Fri | Sat |
---|---|---|---|---|---|---|
- | - | 14:00 – 20:00 | 14:00 – 20:00 | 14:00 – 20:00 | 14:00 – 20:00 | 14:00 – 20:00 |
- | - | - | - | - | - | - |
Supporter timezone: Asia/Ho_Chi_Minh (GMT+07:00)
Etiquetado: Access plugin, Controlling access to front-end content
Documentación relacionada:
Este tema contiene 30 respuestas, tiene 3 mensajes.
Última actualización por marcelB-4 hace 5 años, 9 meses.
Asistido por: Beda.
Ich schau mal schnell rein... ach ja. Ich nehme and Du kopierst und dann fügst Du den View ShortCode manuell ein?
Also Du kopierst [wpv-form-view name="siege-fuer-pokale" spezifischersieg="Championsleague"] und dann fügst Du es manuell ein und änderst den spezifischersieg teil?
Das geht nicht, wegen den "" zeichen.
Die sind danach oft umgeändert.
Also, Du solltest den "Felder und Views" knopf verwenden, dann die View "Siege für Pokale" finden, einfügen und während des einfügens kann man dann im "Abfragefilter" der pokalname eingeben (also der spezifischersieg teil).
Dann auf einfügen klicken.
Das zeigt dann die Nummern so wie erwartet.
Bezüglich "Kann ich auch zwei oder drei Pokale "addieren"?"
Ich bin mir nicht sicher wo genau diese zusätzliche Asobal Cup, Landespokal, Ligapokal etc gespeichert sind?
Kannst Du mir ein beispiel geben anhand des FCB?
Danke!
Der erste Pokal in der Übersicht ist:
Nationale Pokale
Hier wollte ich eigentlich (wegen Platzmangel) alle Pokalwettbewerbe die National gespielt werden, zusammenzählen.
Also:
Supercup, Landespokal, Ligapokal, Copa Asobal.
Die sind alle ebenfalls unter Siege vermerkt.
Also Ich sehe ja dass die Siege all nur an dem feld text-veranstaltung eindeutig erkennbar sind
(und am titel, aber den können wir hier nicht gebrauchen da er gemischte werte hat)
Somit, müssen wir der View einfach sagen dass sie text-veranstaltung werte von Supercup, Landespokal UND andere (wie gewünscht) abfragen soll.
Also nicht nur ein wert im ShortCode attribut spezifischersieg, sondern mehrere.
Das ist so nicht mehr möglich (also mit bloss der View)
Hier brauchen wir was anderes.
Also eine möglichkeit ist es mit einem Custom Code alle Siege zu abrufen die werte haben wie Supercup, Landespokal etc.
Dann, rechnen wir die nummer (total) und senden das in einem Shortcode als ausgabe zurück.
Nun, eine sache muss hier getan werden:
Eine "Feature Request", also eine empfehlung an den Product Manager, muss (von Dir) weidermal eingesnadt werden.
Hier der bereits english übersetzte text:
Please allow us to query Custom Fields in a View by ShortCode attribute with an "compare = 'IN'" or "compare= 'OR'" statement. To explain, take as example the single line field "my_field" which can have values like "value_1", "value_2" and "value_3". If you now want to have a View querying by ShortCode attribute and return posts with values "value_1" and "value_3", we cannot do that since the ShortCode attribute accepts only ONE value a time. We would need to add a comma-separated list to the ShortCode attribute, to receive proper results from the View
Wenn Du mit der Request fertig bist und mit der Custom Code lösung einverstanden bist, werde ich eine lösung vorbereiten.
Diese wird in etwa so aussehen und in Toolset > Settings > Custom Code ingefügt werden:
$args = array( 'post_type' => 'siege', 'meta_query' => array( 'relation' => 'OR', /* Hier sagen wir "wir wollen Posts die ENTWEDER der eine oder andere wert haben array( 'key' => 'wpcf-text-veranstaltung', //Das ist der Feld name 'value' => 'Championsleague', //Feld wert 'compare' => 'LIKE' //vergleichsmethode ), array( //hier weiderholen wir einfach nochmals, diesmal für den neuen wert... 'key' => 'prictext-veranstaltung', 'value' => 'Supercup, 'compare' => 'LIKE' ) //hier müssen etliche NEUE werte als neuer array (also so wie die obigen 2 beispiele) engefügt werden. Wir können damit immer helfen fals nötig ) ); $query = new WP_Query( $args );
Dieser Code ist nicht fertig, er funktioniert nicht, aber bitte lese den Code um zu verstehen wie Du ihn dann später aktualisieren musst, damit Du auch neue feld-werte einfügen könntest.
Das ganze wird dann in ein ShortCode gepackt und später anstelle der View ausgegeben
Denkst Du kannst damit arbeiten? Ich stehe immer zur seite um es zu erklären und zu perfektionieren.
Dokumentation kann hier gefunden werden falls Du neugierig bist:
https://codex.wordpress.org/Class_Reference/WP_Meta_Query (Leider ist WordPress auch nur auf english), Ich weiss nicht ob Du kannst auch auf Deutsch was finden kannst 🙁
Bitte nicht verzagen. Das war was ich auch nicht tun konnte als ich vor 5 jahren Toolset Supporter wurde.
Ich hatte keine ahnung. Zusammen können wir dies schaffen - in zukunft wirst Du deine eigen codes schreiben und mich nicht mehr brauchen
😉
Wo sende ich das hin?
Mir ist jede Lösung recht, sofern es funktioniert.
Dann sind jetzt noch zwei Probleme offen.
Ich könnte auch jeden einzelnen Pokal auflisten, so hätten wir dieses Problem gelöst. Was denkst du?
Ich habe einfach das Gefühl, es wird zu viel und zu unübersichtlich.
OK - heute der grosse tag.
1. Custom Code (auf Deutsch "Personalisierter Code") ist üblicherweise nicht durch Toolset Support geschrieben. Wir können damit helfen im sinne von erklören (Toolset bezogen) und besipiele geben, auch existierender Code analysieren und inputs/ideen geben.
Für vollständing gebrauchsfertigen Code, solltest Du sogenannte "Contractors" (externe leute) in betracht ziehen, diese sind hier aufgelistet: https://toolset.com/contractors/
2. In dem falle hier machen wir eine ausnahme weil - ohen tief zu greifen, diese seite einige punkte wo Toolset schwach ist auflistete und Ich möchte damit garantieren dass Du weiterarbeiten (und lernen) kannst.
3. Custom Code kann immer an 2 orten eingefügt werden:
- in deinem Theme, im "functions.php" dokument welches immer im ordner des Themes zu finden ist, auf deinem server (FTP). Themes sinde immer im ordern "Themes" zu finden, innerhalb des wp-content ordners.
enlace oculto
Deutsch: enlace oculto
- in Toolset > Einstellungen > Personaliserter Code (Custom Code, siehe screenshot)
Wir werden im Toolset > Einstellungen > Personaliserter Code (Custom Code, siehe screenshot) arbeiten da dies viel sicherer ist.
Unser Plugin warnt Dich sogar wenn fehler im code sind 😉
4. Nun zum echten code.
Wir werden vorallem WordPress API und rohes PHP verwenden.
Dokumentationen dazu sind hier:
enlace oculto
https://developer.wordpress.org/reference/
PHP Dokumentation ist auch auf deutsch erhältlich, WordPress nicht.
Programmieren an und für sich ist oft einfacher wenn Du english kannst.
Wir werden die WP_Query (von WordPress, das heisst sowas wie "WordPresss abfrage-filter") verwenden um die Posts abzufragen.
https://codex.wordpress.org/Class_Reference/WP_Query
Dann werden wir ein simpler PHP count() (zähle) funktion anwenden um die resultate zu zählen.
enlace oculto
Am ende werden wir das ganze in einem ShortCode zurück an die seite senden.
https://codex.wordpress.org/Shortcode_API
Der ShortCode wird es Dir ermöglichen die genauen texte einzugeben nach denen Du suchen willst (Championsleague, etc) und eine nummer (total an posts) zurücksenden.
Wenn der ShortCode somit auf dem layout eingefügt wird, wirst du auf der seite die nummer an siegen sehen.
Also los, dies ist der Code den Du in Toolset > Einstellungen > Personaliserter Code (Custom Code, siehe screenshot) speichern solltest:
add_shortcode( 'count-siege-by-shortcode-attr', 'count_siege_by_attr' ); function count_siege_by_attr( $atts, $content = '' ) { //Hier bilden wir ein attribut für den shortcode, wo alle werte des sieges eingegeben werden, komma separiert. // beispiel: [count-siege-by-shortcode-attr type="Championsleague,Landesleague, Nationalcup, etc"] $a = shortcode_atts( [ 'type' => false, ], $atts ); //die ausgbe des ShortCodes ist erst mal leer $output = ''; //falls wir ein Pokal Typ (type attribute) angeben, dann extrahieren wir dies und bilden ein array if ( $a['type'] ) { // Parse type into an array. Whitespace will be stripped. $a['type'] = array_map( 'trim', str_getcsv( $a['type'], ',' ) ); } //nun holen wir uns alle posts von der datenbasis, post typ "siege", wo das feld text-veranstaltung eines der werte von Sieges Typ hat (type attribute). Wir tun dies mit WP_Query und shieben den array von sieges typen rein, um bloss die Posts zu holen welche wir wollen! $args = array( 'post_type' => 'post', 'meta_query' => array( array( 'key' => 'wpcf-text-veranstaltung',//das ist das feld auf das wirt hören wollen 'value' => $a['type'],//$a['type'] haben wir weiter oben im attribut definiert! 'compare' => 'IN' ), //hier müssen etliche NEUE werte als neuer array (also so wie die obigen 2 beispiele) engefügt werden. Wir können damit immer helfen fals nötig ) ); $query = new WP_Query( $args ); //wir zählen alle posts die wir bekamen $total=count($query->posts); //und nun spucken wir die nummer in einer kette (gezählt) aus. $output .= $total; //Shortcode machen niemals ECHO, die machen immer RETURN return $output; }
Nun kann der Shortcode im layout so gebraucht werden:
[count-siege-by-shortcode-attr type="Landespokal,Supercup,ETC"]
Klar, das ETC wird entweder ersetzt durch mehrere siegestypen oder einfach entfernt
Ich habe den code bereits gespeichert, und den ShortCode auch bereits eingesetzt.
Bitte nimm Dir die Zeit, um diesen code zu studieren und fragen zu stellen wo dinge nicht klar sind.
Ich werde zu jeder frage gerne stelung nehmen, es ist mir sehr wichtig dass es nicht zur gewohnheit wird von Toolset "Custom Code" zu erwarten 😉 sondern, dass Du von uns lernen kannst und dies eines tages sogar selbst machen wirst.
Wer weiss, vielleicht wirst Du mal eine entwicklerkarriere in betracht ziehen 😉
Bitte lass mich wissen wie das für Dich so aussieht, und ob mit dem Custom Code was nicht klar ist.
Also für mich stimmt es, sehe screenshot.
Ich sehe nicht immer dieselbe nummer, 10, aber 0, nichts, 9, 4, nichts, , 0, 0
Diese nummern sind alle korrekt, da im "Nationale Pokale" (wo ich vor dem wochenende noch zumindest 10 sah, da Ich beide typen anfügte im ShortCode) Brauchst du nun bloss den attribut "Landespokal"
Also, das kann ja dann nicht alle die posts zählen ausser eben die welche "Landespokal" gespeichert haben.
Wenn Du nichts siehst im front end dann ists weil der shortcode nicht eingesetz wurde (siehe zweiten screenshot)
Falls die nummern nicht stimmen, liegt es daran dass man mehr attribute an den shortcode geben muss, diewelche wir wollen.
Also, für "Nationale Pokale" musst Du alle werte, die in text-veranstaltung vrokommen und Du dan in "Nationale Pokale" willst, einfügen.
Beispiel:
[count-siege-by-shortcode-attr type="Landespokal,Supercup"]
Das wird dann alle posts zählen die entweder Landespokal, ODER Supercup im feld text-veranstaltung haben
Das problem dass nummern ÜBER 10 nicht gezeigt wurden lag wie ich vermutete in der nativen default WP_QUERY welche auf 10 posts per seite (es übernimmt einfach deine webseiten einstellungen) reduziert.
Das habe ich gleich im PHP code angepasst.
Ich habe jetzt bei Meisterschaften "Landesmeister" eingegeben.
Im Frontend erscheint die Zahl 0.
Die 9 bez. 4 und 1 wurden mit einem anderen Shortcode erstellt
Ich hab wohl tomaten auf den augen, die anderen shortcodes sind Views.
OK, so, "Meisterschaften" soll bloss "Siege" mit text-veranstaltung wert "Landesmeister" zurückgeben.
Das sollten dann etwa 100 posts sein, ja?
Ich sah im PHP code dass anstatt "sieg", "Siege" abgefragt wurde, und hab das gleich noch geflickt.
Der code macht nun ein anderes output kannst Du mal schauen ob das so stimmt.
Bin mir noch nicht sicher ob die mathe hier stimmt.
Zumindest haben sich die Zahlen verändert.
Aber Barcelona hat keine 106 Championsleague Titel. Das waren glaube ich 9.
Kann es sein, dass es jetzt ALLES anzeigt und nicht nur diese der jeweiligen Mannschaft?
Richtig, es zeigt ALLE posts die mit wert vom text-veranstaltung übereinstimmen.
Wir wollen aber bloss posts von denen die mit der gegenwärtigen mannschaft verbunden sind.
Mein fehler. Ich muss den PHP code aktualisieren.
Ich melde mich wenn das getan ist.
Ich versuche eine kopie deiner seite zu machen und lokal zu installieren, anders kann ich diesen Code nicht erflogreich testen.
Zu Deiner information, alles wird nach testen wieder gelöscht.
Kann das paket nicht herunterladen, sagt "serverfehler"
Es kann sein dass Der server kein ZIP dopwnload erlaubt, bitte kannst Du das mit dem Server Admin mal abklären?
Hier enlace oculto auf "Archiv" Clicken, und downloaden, prouziert den fehler.
Ich hab mittlerweile versucht die Datenbasis zu kopieren, geht aber nicht da das format irgendwie nicht stimmt nach dem export.
Ich bräuchte eine kopie dieser seite, im schlimmsten falle eine kopie des FTP und der Database, aber am einfachsten währe wenn der Server einfach den ZIP download des Duplicator Plugins erlauben würde.
Danke.
OK, hab den code (setzte eine lokale beispielsseite auf, ging schneller)
Werde ihn nun online ausprobieren.
Also wenn du bloss ein attribut (imer nur ein "type") brauchst, dann brauchen wir kein code das kann man mit Views genau so machen.
Dies ist nur nutzbvoll wenn Du mehrere attribute brauchst, komma separiert.
Also die idee war ja dass Du dann so arbeitest:
[count-siege-by-shortcode-attr type="Landespokal,NOCH MEHR WERTE" post="[wpv-post-id]"]
Ich hab. wie due gesehen hast auch ein NEUER attribut (post=) angeben müssen, der darf nicht geändert werden und MUSS mitgegeben werden.
Stimmt es so?
Neuer Code für den ineteressierten:
<?php /** * New custom code snippet. */ toolset_snippet_security_check() or die( 'Direct access is not allowed' ); add_shortcode( 'count-siege-by-shortcode-attr', 'count_siege_by_attr' ); function count_siege_by_attr( $atts, $content = '' ) { //Hier bilden wir ein attribut für den shortcode, wo alle werte des sieges eingegeben werden, komma separiert. // beispiel: [count-siege-by-shortcode-attr type="Championsleague,Landesleague, Nationalcup, etc"] $a = shortcode_atts( [ 'type' => false, 'post' => false, ], $atts ); //die ausgbe des ShortCodes ist erst mal leer $output = ''; //falls wir ein Pokal Typ (type attribute) angeben, dann extrahieren wir dies und bilden ein array if ( $a['type'] ) { // Parse type into an array. Whitespace will be stripped. $a['type'] = array_map( 'trim', str_getcsv( $a['type'], ',' ) ); } //nun holen wir uns alle posts von der datenbasis, post typ "siege", wo das feld text-veranstaltung eines der werte von Sieges Typ hat (type attribute). Wir tun dies mit WP_Query und shieben den array von sieges typen rein, um bloss die Posts zu holen welche wir wollen! toolset_get_related_posts hilft uns NUR die VERWANDTEN POSTS zu holen $only_related_ids = toolset_get_related_posts( $a['post'], // get posts related to this one 'mannschaften-sieg', // relationship between the posts 'parent', // get posts where $writer is the parent in given relationship 100000,'', // WICHTIG - muss aktualisert werden falls es mal über 10k posts hat!!! array(), // How was his surname, again…? 'post_id' ); $args = array( 'post_type' => 'sieg', 'post__in' => $only_related_ids, 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => 'wpcf-text-veranstaltung',//das ist das feld auf das wirt hören wollen 'value' => $a['type'],//$a['type'] haben wir weiter oben im attribut definiert! 'compare' => 'IN' ), //hier müssen etliche NEUE werte als neuer array (also so wie die obigen 2 beispiele) engefügt werden. Wir können damit immer helfen fals nötig ) ); $query = new WP_Query( $args ); //wir zählen alle posts die wir bekamen $total=count($query->posts); //und nun spucken wir die nummer in einer kette (gezählt) aus. $output .= $total; //Shortcode machen niemals ECHO, die machen immer RETURN return $output; }