do_shortcode () im Twentyvenven Theme

Ich habe einen Unterschied zwischen twentyten und twentyeleven Themen beobachtet. Lassen Sie mich das anhand eines Beispiels erklären: example.com/category/health-beauty/ findet einen Post, der nur einen Shortcode enthält.

Wenn ich twentyten , wird nichts angezeigt, aber in twentyeleven der twentyeleven erweitert. Genau das möchte twentyten auch, aber das Problem ist, dass ich keinen do_shortcode Call im twentyeleven Code finden kann. Es muss eins geben. Recht?

Solutions Collecting From Web of "do_shortcode () im Twentyvenven Theme"

Es sieht so aus, als würde zwanzig zehn den Auszug aus den Kategoriearchiven anzeigen.

Wenn Sie manuelle Auszüge verwenden, ist dies eine einfache Lösung. Fügen Sie diese Codezeile einfach der functions.php-Datei Ihres Themes hinzu. Es teilt WordPress mit, den Auszug durch die function do_shortcode / filter auszuführen.

 add_filter( 'the_excerpt', 'do_shortcode' ); 

Wenn Sie keine manuellen Auszüge verwenden, müssen wir etwas tiefer gehen. Die function the_excerpt nur den Post-Auszug leer oder nicht zurück. Es greift nicht auf Teile des Inhalts und wirft sie, wenn der Auszug leer ist. Das bedeutet, dass WordPress sich entweder in den Filter ” the_excerpt oder ” get_the_excerpt . In wp-includes/default-filters.php finden wir den Schuldigen:

 add_filter( 'get_the_excerpt', 'wp_trim_excerpt' ); 

Die function greift Teile des Post-Inhalts auf, entfernt dabei Shortcodes und gibt sie als Auszug zurück:

 < ?php function wp_trim_excerpt($text) { $raw_excerpt = $text; if ( '' == $text ) { $text = get_the_content(''); $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); if ( count($words) > $excerpt_length ) { array_pop($words); $text = implode(' ', $words); $text = $text . $excerpt_more; } else { $text = implode(' ', $words); } } return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); } 

Also müssen wir diesen Standardfilter entfernen und ihn mit unserem eigenen ersetzen.

 < ?php remove_filter( 'get_the_excerpt', 'wp_trim_excerpt', 10 ); add_filter( 'get_the_excerpt', 'wpse27049_wp_trim_excerpt', 99, 1 ); function wpse27049_wp_trim_excerpt( $text ) { if ( '' == $text ) { $text = get_the_content(''); $text = substr( $text, 0, 55 ); $excerpt_more = apply_filters( 'excerpt_more', '[...]' ); $text = $text . $excerpt_more; } return $text; } 

Alternativ können Sie auch den gesamten Inhalt zurückgeben, wenn kein Auszug vorhanden ist:

 < ?php remove_filter( 'get_the_excerpt', 'wp_trim_excerpt', 10 ); add_filter( 'get_the_excerpt', 'wpse27049_wp_trim_excerpt', 99, 1 ); function wpse27049_wp_trim_excerpt( $text ) { if ( '' == $text ) { $text = get_the_content(''); } return $text; } 

Als Plugin: http://pastie.org/2439045

Im Inhalt müssen Sie do_shortcode nicht aufrufen, der Inhalt wird analysiert, um alle do_shortcode auszuführen. Überprüfen Sie also den Inhalt des Posts oder der Seite, auf der Sie sich befinden.