So extrahieren Sie WordPress-Shortcode-Attribute aus Post-Inhalten

Lesezeit: 3 Minuten

In meinen Posts auf WordPress habe ich eine unbekannte Anzahl von Shortcodes des Typs my_player dass ich Hooks erstellt und korrekt hinzugefügt habe. Ich habe mich gefragt, ob es eine Art WordPress-Funktion gibt, an die Sie Ihren Inhalt und den Shortcode-Namen übergeben können, und die Ihnen eine Reihe übereinstimmender Shortcodes mit ihren Attributen geben könnte, die nach Attributnamen indiziert sind. So etwas wie mein Code unten …

$matches = get_shortcode_matches($content, "my_player");

for($i = 0; $i < sizeof($matches); $i++)
{
    $title = $matches[$i]['title'];
    $mp3 = $matches[$i]['mp3'];
    $soundcloud = $matches[$i]['soundcloud'];
}

Ich weiß, dass, wenn Sie den Hook für die Shortcodes mit dem erstellen add_shortcode() Funktion können Sie diese indizierten Werte wie oben verwenden, aber ich brauche eine Funktion, die später und außerhalb der Schleife auf sie zugreifen kann. Hat WordPress eine solche Funktion?

Dafür gibt es mehrere Möglichkeiten: 1. Schreiben Sie Ihr eigenes Snippet, wie Sie es oben getan haben, und fügen Sie Folgendes in Ihren „mu-plugins“-Ordner ein

// [myplayer attr="your-value"]
function myplayer_func($atts) {
    extract(shortcode_atts(array(
        'title' => 'something',
        'mp3' => 'another something',
                'soundcloud' => 'something else',
    ), $atts));

    return "attr= {$attr}";
}
add_shortcode('myplayer', 'myplayer_func');

Dann

[myplayer title="something" mp3="another something" soundcloud="something else"]

in jedem Beitrag von überall, einschließlich Subdomains. 2. Sie können Plugins wie verwenden Shortcoder und Globale Inhaltsblöcke

  • Ich sagte, dass ich die Haken und die bereits eingerichtet habe add_shortcode() Funktion. Ich weiß, dass Sie diese Informationen aus dieser Funktion verwenden können, aber ich möchte eine Funktion haben, die den Shortcode-Namen und den zu suchenden Inhalt angibt und ein Array von Name-Wert-Paaren zurückgibt. Etwas Ähnliches wie mein Code, der in meinem ursprünglichen Beitrag geschrieben wurde.

    – jas7457

    17. Dezember 2013 um 3:00 Uhr

  • Von der Verwendung der schrecklichen Funktion extract() wird in den WordPress-Codierungsstandards abgeraten. Nur damit du es weißt.

    – Redanimalwar

    25. September 2016 um 12:58 Uhr

Ich glaube nicht, dass Sie dies können, indem Sie vorhandene Aktionen verwenden.
[shortcode_parse_atts] ist mit keinen Ereignissen verbunden. Der einzige Weg, wie Sie dies tun können, ist add_action/global in jedem Ihrer wertvollen [add_shortcode] zugehörige Funktion/Methoden.

Etwas wie :

function doShortCode($atts, $content=null){
    global $my_shortcode_storage;
    $my_shortcode_storage['my_shortcode_1'][] = $atts;
}

Ich konnte auch nichts finden, also habe ich mein eigenes erstellt. Zuerst habe ich die folgende Funktion erstellt, um die Attribute ordnungsgemäß aus einem Shortcode herauszuziehen:

function eri_shortcode_parse_atts( $shortcode ) {
    // Store the shortcode attributes in an array here
    $attributes = [];

    // Get all attributes
    if (preg_match_all('/\w+\=\".*?\"/', $shortcode, $key_value_pairs)) {

        // Now split up the key value pairs
        foreach($key_value_pairs[0] as $kvp) {
            $kvp = str_replace('"', '', $kvp);
            $pair = explode('=', $kvp);
            $attributes[$pair[0]] = $pair[1];
        }
    }

    // Return the array
    return $attributes;
}

Dann habe ich die folgende Funktion erstellt, um die Seite nach allen Iterationen des Shortcodes zu durchsuchen:

function eri_get_shortcode_on_page( $post_id, $shortcode ) {
    // Get the post content once
    $content = get_the_content( null, false, $post_id );
    // $content = apply_filters( 'the_content', get_the_content( null, false, $post_id ) ); // Alternative if get_the_content() doesn't work for whatever reason

    // Double check that there is content
    if ($content) {

        // Shortcode regex
        $shortcode_regex = '/\['.$shortcode.'\s.*?]/';

        // Get all the shortcodes from the page
        if (preg_match_all($shortcode_regex, $content, $shortcodes)){
            
            // Store them here
            $final_array = [];
            
            // Extract the attributes from the shortcode
            foreach ($shortcodes[0] as $s) {
                $attributes = eri_shortcode_parse_atts( $s );

                // The return the post
                $final_array[] = $attributes;
            }

            // Return the array
            $results = $final_array;

        // Otherwise return an empty array if none are found
        } else {
            $results = [];
        }

        // Return it
        return $results;
    } else {
        return false;
    }
}

Benutzer-Avatar
Balaji Perumal

Versuche dies,

<?php do_shortcode($content); ?>

1341880cookie-checkSo extrahieren Sie WordPress-Shortcode-Attribute aus Post-Inhalten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy