WordPress – Überschreiben eines Shortcodes

Lesezeit: 4 Minuten

Benutzeravatar von Daniel Harris
Daniel Harris

Ich habe ein Design, das das Visual Composer-Plugin um einen Schieberegler auf der Startseite erweitert. Der Slider zeigt fünf Erfahrungsberichte von fünf verschiedenen Kunden. Ich möchte das vorgestellte Bild jedes Zeugnisses als Miniaturansicht im Schieberegler hinzufügen.

Hier ist der verkürzte Code aus dem übergeordneten Thema:

function jo_customers_testimonials_slider( $atts ) {
    extract( shortcode_atts( array( 'limit' => 5, "widget_title" => __('What Are People Saying', 'jo'), 'text_color' => "#000" ), $atts ) );
    $content = "";
    $loopArgs = array( "post_type" => "customers", "posts_per_page" => $limit, 'ignore_sticky_posts' => 1 );

    $postsLoop = new WP_Query( $loopArgs );
    $content = "";

    $content .= '...';
    $content .= '...';
    $content .= '...';

    wp_reset_query();
    return $content;
}
add_shortcode( 'jo_customers_testimonials_slider', 'jo_customers_testimonials_slider' ); 

Meine functions.php-Datei:

function jo_customers_testimonials_slider_with_thumbnail( $atts ) {
    extract( shortcode_atts( array( 'limit' => 5, "widget_title" => __('What Are People Saying', 'jo'), 'text_color' => "#000" ), $atts ) );
    $content = "";
    $loopArgs = array( "post_type" => "customers", "posts_per_page" => $limit, 'ignore_sticky_posts' => 1 );

    $postsLoop = new WP_Query( $loopArgs );
    $content = "";

    $content .= '...';
    $content .= get_the_post_thumbnail( get_the_ID(), 'thumbnail' );
    $content .= '...';
    $content .= '...';

    wp_reset_query();
    return $content;
}
add_shortcode( 'jo_customers_testimonials_slider', 'jo_customers_testimonials_slider_with_thumbnail' );

Theoretisch sollte die Funktion aus meiner functions.php-Datei den Shortcode aus dem Parent-Theme überschreiben. Aber nichts scheint zu passieren, wenn ich diesen Code verwende. Was mache ich falsch?

Bearbeiten:

Ich habe diesen Code ausprobiert, aber er funktioniert immer noch nicht.

function wpa_add_child_shortcodes(){
remove_shortcode('jo_customers_testimonials_slider');
    add_shortcode( 'jo_customers_testimonials_slider', 'jo_customers_testimonials_slider_with_thumbnail' );
}
add_action( 'after_setup_theme', 'wpa_add_child_shortcodes' );

Auch geändert

add_action( 'after_setup_theme', 'wpa_add_child_shortcodes' ); zu

add_action( 'init', 'wpa_add_child_shortcodes' );

aber kein Unterschied im Ergebnis.

Bearbeiten 2 (mit Lösung):

Ändern add_action( 'after_setup_theme', 'wpa_add_child_shortcodes' ); zu add_action( 'wp_loaded', 'wpa_add_child_shortcodes' ); Ich habe es gelöst.

Benutzeravatar von Clark T
Clark T.

du musst anrufen remove_shortcode(); so was:

remove_shortcode('jo_customers_testimonials_slider');` 

Bevor Sie Ihren neuen Shortcode mit demselben Namen hinzufügen, um ihn zu “überschreiben”.

Sie müssen es auch aufrufen, nachdem das übergeordnete Thema ausgeführt wurde, damit wir bei einem aufgerufenen Action-Hook feuern wp_geladen.

function overwrite_shortcode() {

    function jo_customers_testimonials_slider_with_thumbnail($atts) {
        extract(shortcode_atts(array('limit' => 5, "widget_title" => __('What Are People Saying', 'jo'), 'text_color' => "#000"), $atts));
        $content = "";
        $loopArgs = array("post_type" => "customers", "posts_per_page" => $limit, 'ignore_sticky_posts' => 1);

        $postsLoop = new WP_Query($loopArgs);
        $content = "";

        $content .= '...';
        $content .= get_the_post_thumbnail(get_the_ID(), 'thumbnail');
        $content .= '...';
        $content .= '...';

        wp_reset_query();
        return $content;
    }

    remove_shortcode('jo_customers_testimonials_slider');
    add_shortcode('jo_customers_testimonials_slider', 'jo_customers_testimonials_slider_with_thumbnail');
}

add_action('wp_loaded', 'overwrite_shortcode');

  • Habe das versucht. Funktioniert nicht, da die Datei functions.php vor den Funktionsdateien des übergeordneten Themas aufgerufen wird.

    – Daniel Harris

    21. Januar 2014 um 18:05 Uhr

  • haben Sie versucht, so etwas zu tun function shortcode_cleaner() { remove_shortcode(); add_shortcode( ); } add_action( ‘init’, ‘shortcode_cleaner’ ); das sollte theoretisch zuerst Ihre Kurzwahl registrieren und verhindern, dass er sie überschreibt.

    – Clark T.

    21. Januar 2014 um 18:10 Uhr


  • @Daniel, dann hast du einen hartnäckigen … Hast du versucht, meinen letzten Vorschlag zu machen, aber anstatt auf init es auf dem after_setup_theme-Hook zu tun? oder wenn Sie versuchen, es zu tun, nachdem er registriert ist, versuchen Sie es mit dem wp_loaded-Hook

    – Clark T.

    21. Januar 2014 um 18:16 Uhr


  • after_setup_theme geht auch nicht. Danke für den Versuch.

    – Daniel Harris

    21. Januar 2014 um 18:17 Uhr

  • @Daniel was ist mit dem wp_loaded Hook? und entschuldigen Sie, dass ich nur Vermutungen angestellt habe. Ich habe keine untergeordneten Themen zum Testen.

    – Clark T.

    21. Januar 2014 um 18:21 Uhr

Du musst diesen Code in die functions.php deines Child Themes schreiben

add_action( 'after_setup_theme', 'calling_child_theme_setup' );

function calling_child_theme_setup() {
   remove_shortcode( 'parent_shortcode_function' );
   add_shortcode( 'shortcode_name', 'child_shortcode_function' );
}

function child_shortcode_function( $atts) {
    $atts = shortcode_atts( array(
        'img'  => '',
        'cat'  => '',
        'capt' => '',
        'link' => ''
    ), $atts );

//YOUR OWN CODE HERE

    $imgSrc = wp_get_attachment_image_src( $atts['img'], 'delicious-gallery' );

    $imgFull = wp_get_attachment_image_src( $atts['img'], 'full' );



    $b = '<div class="screen-item" data-groups=\'["'.strtolower(str_replace(' ', '_', $atts["cat"])).'", "all"]\'>'.

        '<a href="'.$atts["link"].'" data-title="'.$atts["capt"].'" target="_blank"><img src="'.$imgSrc[0].'" alt="SCREEN" class="screenImg" /></a>'.

        '<span>'.$atts["capt"].'</span>'.

    '</div>';

//YOUR OWN CODE HERE

    return $b;
}

1402130cookie-checkWordPress – Überschreiben eines Shortcodes

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

Privacy policy