在呈现内容时是否应用了短码函数,或者它们是否与帖子内容一起执行和存储?

时间:2011-11-19 作者:Rutwick Gangurde

我不确定我问的问题是否正确,抱歉!我想做的是,输出a<!--nextpage--> 通过短代码标记。但它不起作用,我想是因为在呈现内容时应用了短代码,而<!--nextpage--> 提前解析为链接。有人知道这是否可以做到吗?我可以申请<!--nextpage--> 在呈现帖子时标记我的快捷码?

1 个回复
最合适的回答,由SO网友:Johannes Pille 整理而成

我不知道过滤器的确切顺序是什么the_content(); 还有,这是否足够早,但如果它对你不起作用,我相信可以安全地假设你认为短代码适用于晚代码是正确的。

从…起/wp-includes/shortcodes.php (第296行,wp 3.2.1)可以看出,短代码的自然解析如下:

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: 尽早运行您自己的替换函数可能会更安全(以下假设您的短代码被称为[下一步]):

function do_rutwick_shortcode($content) {
    $content = preg_replace(\'{\\[next\\]}\',\'<!--nextpage-->\',$content);
    return $content;
}
并使用上述两种方法中的任何一种调用它(即将其挂接到the_content 使用较低优先级编号或替换do_shortcode(...) 具有do_rutwick_shortcode(...) 在上面for 循环)。如果您选择这样做,请使用add_shortcode 变得多余。此外,如果你选择the_posts 这个preg_replace 可以直接在所述功能中运行,不需要两个,即:

$posts[$i]->post_content =
    preg_replace(\'{\\[next\\]}\',\'<!--nextpage-->\',$posts[$i]->post_content);
将为您保存一个函数调用。

结束