私が質問をきちんと尋ねたかどうかはわかりません、それにお詫び申し上げます。私がやろうとしているのは、ショートコードで<!--nextpage-->
タグを出力することです。しかし、それはうまくいきません。コンテンツがレンダリングされるときにショートコードが適用されるのに対して、<!--nextpage-->
は事前にリンクに解決されるからです。これができるかどうか誰かが知っていますか?投稿がレンダリングされるときに私のショートコードを通して<!--nextpage-->
タグを適用することができますか?
どのような順序でthe_content();
にフィルタが適用されるのか、それが十分早いのかどうかはわかりませんが、それがうまくいかない場合は、ショートコードが正しく適用されると考えるのは正しいと思います。遅れた。
/wp-includes/shortcodes.php
(296行、3.2p)から、当然のことながらショートコードは次のように解決されることがわかります。
add_filter('the_content', 'do_shortcode', 11); // AFTER wpautop()
do_shortcode
フックが実行されるときに代わりに the_posts
を実行すると、それらが十分に早く実行されるようになります。投稿がデータベースから取得された直後にthe_posts
が実行されます。以下が動作するはずです。
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;
}
優先順位を下げるだけで十分です。
add_filter('the_content', 'do_shortcode', 9);
私は上記をテストしていないと私は何も保証していないことに注意してください。また、 wpautop
と衝突する可能性があります。これは、上記が適用された場合、コンテンツをフィルタリングする前にショートコード(すべてのショートコード!)が解決されるためです。
EDIT:早めに独自の置換関数を実行する方が安全な場合があります(以下ではショートコードが[next]と呼ばれると仮定します)。
function do_rutwick_shortcode($content) {
$content = preg_replace('{\[next\]}','<!--nextpage-->',$content);
return $content;
}
そして、上記の2つの方法のどちらかを使用してそれを呼び出します(すなわち、より低い優先順位番号を持つthe_content
にフックするか、または上記のfor
ループでdo_shortcode(...)
をdo_rutwick_shortcode(...)
に置き換える)。そうすることを選択した場合、add_shortcode
の使用は不要になります。また、the_posts
にフックすることを選択した場合、 preg_replace
を直接この関数で実行できれば、2つは必要ないでしょう。
$posts[$i]->post_content =
preg_replace('{\[next\]}','<!--nextpage-->',$posts[$i]->post_content);
あなたは関数呼び出しを節約するでしょう。