Werden beim Rendern des Inhalts Shortcode-functionen angewendet oder werden sie mit dem Post-Inhalt ausgeführt und gespeichert?

Ich bin mir nicht sicher, ob ich die Frage richtig gestellt habe, Entschuldigung dafür! Was ich versuche ist, ein

Solutions Collecting From Web of "Werden beim Rendern des Inhalts Shortcode-functionen angewendet oder werden sie mit dem Post-Inhalt ausgeführt und gespeichert?"

Ich weiß nicht, in welcher Reihenfolge Filter auf the_content(); angewendet werden the_content(); und ob das früh genug ist, aber wenn es nicht für Sie funktioniert, kann ich davon ausgehen, dass Sie Recht haben, wenn Sie denken, dass der Shortcode zu spät angewendet wird.

Aus /wp-includes/shortcodes.php (Zeile 296, wp 3.2.1) ist ersichtlich, dass /wp-includes/shortcodes.php folgt aufgetriggers werden:

 add_filter('the_content', 'do_shortcode', 11); // AFTER wpautop() 

do_shortcode stattdessen the_posts do_shortcode während der the_posts Hook ausgeführt wird, sollten Sie sicherstellen, dass sie früh genug ausgeführt werden. the_posts unmittelbar nachdem Posts aus der database abgerufen wurden. Folgendes sollte funktionieren:

 add_filter('the_posts', 'rutwick_shortcode_exec'); function rutwick_shortcode_exec($posts) { $post_count = count($posts); for ($i = 0; $i < $post_count; ++$i) { do_shortcode($posts[$i]->post_content); } return $posts; } 

Es kann sein, dass das Herabsetzen der Priorität ausreicht:

 add_filter('the_content', 'do_shortcode', 9); 

Es sei angemerkt, dass ich das oben Gesagte nicht getestet habe und ich garantiere nichts. Es kann auch zu Konflikten mit wpautop , denn wenn das oben wpautop angewendet wird, werden Shortcodes (alle Shortcodes!) Jetzt aufgetriggers, bevor der Inhalt gefiltert wird.

BEARBEITEN: Es könnte sicherer sein, Ihre eigene Ersatzfunktion so früh wie möglich zu betreiben (im Folgenden wird davon ausgegangen, dass Ihr Shortcode [weiter] heißt):

 function do_rutwick_shortcode($content) { $content = preg_replace('{\[next\]}','',$content); return $content; } 

und rufe das unter Verwendung einer der beiden obigen Methoden auf (dh the_content es in the_content mit einer niedrigeren Prioritätsnummer oder ersetze do_shortcode(...) mit do_rutwick_shortcode(...) in der obigen for Schleife). Wenn Sie dies tun, wird die Verwendung von add_shortcode überflüssig. Wenn Sie sich für das Einhängen in the_posts entscheiden, the_posts der the_posts direkt in der function ausgeführt werden, zwei würden nicht benötigt, dh:

 $posts[$i]->post_content = preg_replace('{\[next\]}','',$posts[$i]->post_content); 

würde dir einen functionsaufruf ersparen.