Problem mit eigenen Shortcodes

  • Hallo zusammen,
    ich denke das ist das falsche Unterforum aber ich habe kein Passendes gefunden. Ich habe ein kleines eigenes Plugin geschrieben, welches mir Shortcodes bereitstellt für eine Multi-Tag-Suche, eine Tagcloud und eine Bereitstellung der Beiträge einer Kategorie in einem div. Soweit so gut und es klappt auch alles. Doch ich habe folgendes Problem:

    Wenn ich die Shortcodes in einer Seite bzw. einem Beitrag einfüge, dann wird der Inhalt an den Anfang des Contents gestellt und nicht an die Stelle, wo ich ihn im Inhalt eingefügt habe.

    Beispiel:
    TextTextText
    [shortcode]
    TextTextText

    Ausgabe:
    [shortcode]
    TextTextText
    TextTextText

    Wordpress-Version: 4.7.2 Theme: Twenty Seventeen

    Es handelt sich um eine Testseite auf Arbeit und daher bitte ich um Verständnis, dass ich diese hier nicht öffentlich posten will.

    Für die Veranschaulichung hier die Tagcloud-Funktion:

    Könnt ihr mir helfen meinen Fehler zu finden?

    Viele Grüße

    Thomas

    Bitte weitergehen, hier gibt es nix zu sehen.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Versuche es mal so

    Das Geheimnis des Könnens liegt im Wollen!
    [size=12]Bitte keine Hilfegesuche per PN (auch keine "privaten" Links). Das ist ein öffentliches Forum.[/SIZE]

  • Könnt ihr mir helfen meinen Fehler zu finden?


    Der Fehler ist, dass ein Shortcode nichts direkt per [FONT=courier new]echo[/FONT] o.ä. ausgeben darf, sondern die Ausgaben am Ende per [FONT=courier new]return[/FONT] zurückgibt (wie im korrigierten Beispiel von SirEctor).

    Anmerkung 1: Wenn ein Shortcode statt im Content direkt in PHP aufgerufen werden soll, wird dann dort das entspr. [FONT=courier new]ech[/FONT][FONT=courier new]o[/FONT] ergänzt, z.B. [FONT=courier new]<?php echo do_shortcode( 'schlagwoerter' ); ?>[/FONT].

    Anmerkung 2, passt hier evtl. nicht ganz, aber trotzdem für den einen oder anderen sicher interessant: Für eine generelle Anpassung der Parameter der WordPress Tag-Cloud kann man den [FONT=courier new]widget_tag_cloud_args[/FONT] Filter verwenden.

    Danke aber leider ist das Ergebnis das Gleiche.


    Hier ist noch ein Fehler:

    Code
    'echo'                      => true,


    ändern in:

    Code
    'echo'                      => false,

    Einmal editiert, zuletzt von b3317133 (6. März 2017 um 11:35)

  • @b3317133: Jetzt funktioniert es, vielen Dank. Zumindest mit dieser Funktion. Die anderen Beiden werde ich auch gleich Mal testen :)

    Bitte weitergehen, hier gibt es nix zu sehen.

  • Hier ist noch ein Fehler:

    Code
    'echo'                      => true,


    ändern in:

    Code
    'echo'                      => false,


    Ups, das habe ich dann wohl übersehen ...

    Schön das es jetzt funktioniert.

    Das Geheimnis des Könnens liegt im Wollen!
    [size=12]Bitte keine Hilfegesuche per PN (auch keine "privaten" Links). Das ist ein öffentliches Forum.[/SIZE]

  • Schön das es jetzt funktioniert.

    Ja auf jeden Fall :)

    Ich habe jetzt aber das nächste Problem, was ich mir nicht erklären kann. Bin jetzt bei der Ausgabe in einem div für eine Kategorie. Hier der Code:

    Aufgerufen wird der Shortcode im WP-Editor mit [kategorieposts cat="1" catname="Software"] .

    Nach der Umstellung auf die Funktionsrückgabe habe ich jetzt das Problem, dass erst alle Beitragsüberschriften ausgegeben werden (das in der while-Schleife) und anschließend die Div-Box kommt. Die Überschriften sind die aus der angegebenen Kategorie.

    Wahrscheinlich wieder ein ganz billiger Fehler aber ich habe wohl gerade Tomaten auf den Augen ;) Könnt ihr mir auch bei dem Problem helfen?

    Bitte weitergehen, hier gibt es nix zu sehen.

  • [FONT=courier new]the_title() -> get_the_title()[/FONT]


    du bist der Wahnsinn. ;)

    Habe jetzt

    PHP
    while (have_posts()) : the_post();
            $tjdivKategorie .= '<h3>&raquo; <a href="%s">'.esc_url( get_permalink());
            $tjdivKategorie .= get_the_title();
            $tjdivKategorie .= '</a></h3>' ;
    endwhile;

    Jetzt gibt er mir die URLs in den Boxen aus aber nicht die Titel. ´Das sollte aber machbar sein.

    Bitte weitergehen, hier gibt es nix zu sehen.

  • Am Rande: Du solltest statt [FONT=courier new]query_posts()[/FONT] besser [FONT=courier new]get_posts()[/FONT] i.v.m. [FONT=courier new]setup_postdata()[/FONT] wie hier im Beispiel 1 verwenden. Dabei das [FONT=courier new]global $post[/FONT] und [FONT=courier new]wp_reset_postdata()[/FONT] nicht vergessen.

    Siehe auch die Warnung in der Doku zu query_posts().

    ok, schaue ich mir mal an.

    Bitte weitergehen, hier gibt es nix zu sehen.

  • nochmal ich ;) Ich dachte ich mache lieber keinen neuen Thread auf für meine neue Fragestellung, da sie auf der alten Frage ausbaut.

    Ich habe ja die Boxen, die je nach Kategorie die Beiträge anzeigen. Ich kann auch im Shortcode einen Tag (bzw. und/oder-verknüpft mehrere Schlagworte) übergeben und es werden mir die entsprechenden Beiträge korrekt angezeigt. Jetzt möchte ich das Ganze in die Archive-Seite einpflegen, sodass je nach gewähltem Tag (oder mehrere) die richtigen Beiträge nach Kategorien in den Boxen angezeigt werden. Ich habe aber leider noch keine Möglichkeit gefunden die an die Archivseite übergebenen Tags auszulesen. Bisher kriege ich in den von mir gefundenen Varianten alle vorhandenen Tags ausgegeben, was ja nicht der Sinn ist.
    Gibt es da eine Möglichkeit, die übergebenen Tags auszulesen? Am liebsten ohne dass ich mit JavaScript die URL aufdrösele.

    Bitte weitergehen, hier gibt es nix zu sehen.

  • PHP
    $queried_object = get_queried_object();
    $term_id = $queried_object->term_id;


    Siehe auch hier.

    Besten Dank, das schaue ich mir an und ich bin mir sicher, dass es funktioniert, wenn du es geschrieben hast ;)

    Bitte weitergehen, hier gibt es nix zu sehen.

  • leider funktioniert es nur zum Teil. Ich greife auf den Namen zu und übergebe ihn. Das geht wunderbar ($queried_object->name; statt term_id)

    Allerdings funktioniert es nicht mit der MultiTag-Suche, da nur eine ID bzw. ein Tag übergeben wird. Komme ich an die Schlagworte tag1,tag2 für die oder-Verknüpfung und tag1+tag2 für die und-Verknüpfung ran?

    Bitte weitergehen, hier gibt es nix zu sehen.

  • Schau Dir das Beispiel auf der verlinkten Seite an, das gibt alles aus, was man via [FONT=courier new]get_queried_object()[/FONT] bekommt. Evtl. kommst Du mit [FONT=courier new]get_query_var()[/FONT] weiter, oder Du schaust direkt in [FONT=courier new]$wp_query[/FONT] nach, hier ein Beispiel analog mit Kategorien.

  • Schau Dir das Beispiel auf der verlinkten Seite an, das gibt alles aus, was man via [FONT=courier new]get_queried_object()[/FONT] bekommt. Evtl. kommst Du mit [FONT=courier new]get_query_var()[/FONT] weiter, oder Du schaust direkt in [FONT=courier new]$wp_query[/FONT] nach, hier ein Beispiel analog mit Kategorien.

    So einfach kann die Lösung sein. Das genügt für das Auslesen aller Tags

    PHP
    $tag_name = $wp_query->query['tag'];

    Danke nochmals :)

    Bitte weitergehen, hier gibt es nix zu sehen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!