在应用过滤器之后将过滤器添加到内容中

时间:2012-11-12 作者:AlxVallejo

我有一个输出null(“”)的短代码。

我试图实现的是,如果短代码输出null,则输出一条默认消息。我不想扩展我的短代码,因为可能有多个短代码实例,我不想多次输出消息。

所以我的功能如下:

function av_standalone_doc_404($content) {
    if(has_term(\'standalone-document\', \'formats\')){
        $filtered_content = apply_filters(\'the_content\', $content);
        if(empty($content)){
            // Display 404 message
            $output .= \'<div id="404_message">Error:
                Please check this page later.</div>\';
        }else{
            $output .= \'\';
        }
        return $output . $content;
    }
}
add_filter(\'the_content\', \'av_standalone_doc_404\', 12);
问题是apply_filters 正在导致致命错误-显然是因为您无法对内容和调用应用筛选器apply_filters 在该过滤器内。

“12”加载顺序似乎也没有帮助。

如何在将短代码应用于的后续过滤器之后应用过滤器the_content?

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

如果要保持当前设置,请尝试尽早挂接并使用do_shortcode():

function av_standalone_doc_404($content) 
{
    remove_filter( current_filter(), __FUNCTION__ );

    if ( has_term( \'standalone-document\', \'formats\' ) )
    {
        $filtered_content = do_shortcode( $content );
        // …
如果要避免重复短代码输出,请在短代码处理程序中使用静态变量:

function shortode_handler()
{
    static $done = FALSE;

    if ( $done )
        return;

    $done = TRUE;

    // create the shortcode output; this will happen only once.

    return $output;
}

结束

相关推荐

Add_ShortCode()在函数内不起作用

我有一个自定义的帖子类型bhour, 带字段bh_shortcode. 保存这种类型的帖子时,我希望它根据帖子的值bh_shortcode.如果bh_shortcode 是“test”,当一个[测试]快捷码标记出现在一个普通的post类型上时,不会发生任何事情--[测试]文本不会被替换。如果我放置add_shortcode(\'test\',\'save_bhour_details\'); 在功能之外,将替换[测试]文本。如何使用add_shortcode 函数内部的另一个函数?function bhou