如何确保“the_Content”过滤器只对主要显示的内容运行?

时间:2014-02-13 作者:MythThrazz

我有一个插件,它将该方法添加到“the\\u content”过滤器中。

add_filter(\'the_content\', \'myFilteringFunction\', 10000);

在这个函数中,我想在内容的开头和结尾添加一些链接。但我只需要对显示页面的“主要”内容执行此操作,所以不需要在任何小部件中执行,也不需要在页脚、页眉等中执行。

此外,我只想将其包含在我在同一插件中定义的自定义帖子类型中。所以我算出了那种支票,我想这就足够了。

if( is_single() && get_query_var(\'post_type\') == \'myCustomPostType\' && is_main_query() )
不幸的是,它并没有按预期工作——至少不是在所有情况下。

在页面上插件WP Types 已安装,但不起作用(尽管存在条件,但仍添加了链接)。为什么?

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

尝试向筛选函数中添加一个条件,以根据get_post_type.

if ( \'book\' == get_post_type() )

如果您也希望将此筛选器应用于页面,请尝试is_singular() 并将自定义帖子类型作为参数包含在内。

is_singular(\'book\');

如果以下任一条件为true,则返回true:
is\\u single()
is\\u page()
is\\u attachment()
“book”==get\\u post\\u type()

SO网友:Stephen M. Harris

根据Wordpress documentation, 您可以使用以下代码完成此操作:

add_filter( \'the_content\', \'filter_the_content_in_the_main_loop\' );

function filter_the_content_in_the_main_loop( $content ) {

    // Check if we\'re inside the main loop in a single post page.
    if ( is_single() && in_the_loop() && is_main_query() ) {
        return $content . "I\'m filtering the content inside the main loop";
    }

    return $content;
}
或者通过过滤器回调函数开头的一行使用相同的逻辑:

if( !is_single() || !in_the_loop() || !is_main_query() ) return $content;

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post