Shortcode mit Parameter

  • Hallo,

    ich möchte mir einen Shortcode basteln, der beispielsweise bei

    Code
    [mein_shortcode sprache="deutsch"]

    die Datei deutsch.php "inkludet" und bei

    Code
    [mein_shortcode sprache="englisch"]

    die Datei englisch.php. Ich hänge an der Stelle mit dem Parameter. Hier ist mein kläglicher Versuch:

    Liebe Grüße
    Hugo

    Einmal editiert, zuletzt von h-u-g-o (31. März 2009 um 12:59)

    • 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

  • Statt $atts["sprache"] musst du $sprache nutzen, also z.B.:

    PHP
    if ($sprache == 'deutsch')


    Alle Parameter, die dein Shortcode verwendet, werden in Variablen analog zum Parameternamen "gewandelt".

    wpseek.com - Die WordPress-Code-Suchmaschine

  • Ah, vielen Dank für den wertvollen Hinweis. :)

    Ich hab's gerade ausprobiert, leider wird mir trotzdem anstelle des Shortcodes nichts im Artikel angezeigt. :(

    So müsste es doch jetzt richtig sein:

  • Ja, der Pfad stimmt. Es muss daran liegen, dass entweder [COLOR=#000000][COLOR=#0000cc]$rueckgabewert[/COLOR][/COLOR] leer ist oder [COLOR=#000000][COLOR=#006600]return [/COLOR][COLOR=#0000cc]$rueckgabewert[/COLOR][COLOR=#006600];[/COLOR][/COLOR] nicht ausgeführt wird.

    [edit]Ich hab's getestet, indem ich

    PHP
    echo 'Hallo Welt!';

    unter

    PHP
    return $rueckgabewert;

    eingefügt habe. Auch "Hallo Welt!" wird nicht angezeigt.[/edit]

    [edit2]Das ist schon komisch, denn

    PHP
    function mein_shortcode() {
        include 'deutsch.php';
        return $rueckgabewert;
    }
    add_shortcode('mein_shortcode', 'mein_shortcode');

    funktioniert beim Aufruf mit [COLOR=Blue][mein_shortcode][/COLOR].[/edit2]

    Einmal editiert, zuletzt von h-u-g-o (31. März 2009 um 15:09)

  • Gibt es in der deutsch.php denn Inhalt, der ausgegeben werden soll? echo-Befehle werden nämlich nicht dort ausgegeben, wo der Shorttag steht, das geht alles über den Rückgabewert (wo wird der hier überhaupt gesetzt?).

    Vielleicht geht's so:

    PHP
    ob_start();
        include('deutsch.php');
        $rueckgabewert = ob_get_contents();
        ob_end_clean();

    Einmal editiert, zuletzt von spickzettel (31. März 2009 um 14:29)

  • Ja, den gibt es. Der Rückgabewert wird in beiden Dateien gesetzt und hat definitiv auch Inhalt. Siehe dazu edit2 meines vorangehenden Beitrags.

  • Wo kommen die Anführungszeichen her? Irgendwas stimmt da nicht. Gerade getestet:

    [mein_shortcode sprache="deutsch"] ergibt deutsch.
    [mein_shortcode sprache="englisch"] ergibt englisch.

  • Statt $atts["sprache"] musst du $sprache nutzen, also z.B.:

    PHP
    if ($sprache == 'deutsch')

    Alle Parameter, die dein Shortcode verwendet, werden in Variablen analog zum Parameternamen "gewandelt".

    Es geht auch mit $atts["sprache"]. :)

    Vielleicht geht's so:

    PHP
    ob_start();
        include('deutsch.php');
        $rueckgabewert = ob_get_contents();
        ob_end_clean();

    Das verstehe ich nicht. :(

    Einmal editiert, zuletzt von h-u-g-o (31. März 2009 um 18:03)

  • Du meinst bestimmt:

    Oder:

    Wo kommen die Anführungszeichen her? Irgendwas stimmt da nicht.

    Da lag der Hund begraben. Das Plugin Intypo war schuld. Nach Deaktivieren des Plugins funktioniert's. :rolleyes:

    Ganz herzlichen Dank für deine Unterstützung! :-D

    [edit]Wie kann ich denn nun das Plugin Intypo und Shortcodes mit Parametern nutzen?[/edit]

    Einmal editiert, zuletzt von h-u-g-o (31. März 2009 um 18:01)

  • Der Filterfunktion von intypo muss eine niedrigere Priorität gegeben werden, damit zuerst die Shortcodes aufgelöst werden. Die Shortcodes haben lt. Dokumentation eine Priorität von 11.

    Also mal probieren:

    PHP
    add_filter($hook,'ity_texturize');

    (intypo.php, Zeile 20) zu ändern in

    PHP
    add_filter($hook,'ity_texturize',12);

Jetzt mitmachen!

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