嵌套调用_Content筛选器

时间:2012-10-16 作者:Ken

我正在编写一个插件,在帖子(或页面)末尾添加一些自定义内容。因此,我为“the\\u content”添加了一个过滤器,插件将其内容添加到那里。大多数情况下,它是有效的。

然而,有些网站会在主页上显示几个帖子的全部内容(而不仅仅是摘录)。在这些网站上,对于显示的每个帖子,我的过滤器都会被调用一次。因此,自定义内容会多次显示。

是否有某种方法可以检测我的筛选器何时是嵌套调用?一、 e.要求提供主页上显示的帖子内容。然后,我只能在“顶级”呼叫时添加自定义内容。

我还考虑将过滤器附加到页脚而不是内容,但我遇到过没有页脚的主题。

谢谢知识范围

1 个回复
SO网友:kaiser

单过滤器调用

试试这个插件。它说明了整个技术。

<?php
/** Plugin Name: (#69351) Example single filter call on <code>\'the_content\'</code> */
function wpse69351_single_call( $content )
{
    // Only for single view request (post, page, etc.)
    if ( ! is_singular() )
        return $content;

    // This removes the filter during its first call
    remove_filter( current_filter(), __FUNCTION__ );

    $custom = \'<h1>I am only here once!</h1>\';

    return $content.$custom;
}
add_filter( \'the_content\', \'wpse69351_single_call\' );
如果你的目标不是内容本身,而是更多的循环,那么试试这个示例插件。

<?php
/** Plugin Name: (#69351) Example single filter call on <code>\'loop_start\'</code> &amp; <code>\'loop_end\'</code> */
function wpse69351_single_call( $wp_query )
{
    // Abort in some case
    if ( \'post\' !== get_query_var( \'post_type\' ) )
        return;

    // This removes the filter during its first call
    remove_filter( current_filter(), __FUNCTION__ );

    return print \'<h1>I am only here once!</h1>\';
}
// Attach something to the START of the loop
add_action( \'loop_end\', \'wpse69351_single_call\' );
// Attach something to the END of the loop
add_action( \'loop_start\', \'wpse69351_single_call\' );

不完整的主题

我也考虑将过滤器附加到页脚而不是内容,但我遇到过没有页脚的主题。

从来不敢去想关心不完整的主题。我们得到了主题开发指南,这是有原因的,我们呼吁wp_footer(); 是一个must have 对于每个主题。否则,想想“这是胡说八道!”独自前行。

结束

相关推荐

Ajax, filters and shortcodes

您能理解为什么我无法在ajax帖子包含中应用短代码过滤器吗?让我更好地解释一下:我已经设法在另一篇文章中包含一篇文章,通过admin-ajax.php, 正如著名的5 tips.很明显,我不想显示快捷码标签,也不想去掉它们,所以我在回应do_shortcode($post->post_content)此时,虽然我正在运行“Cleaner gallery”插件,但post gallery会被渲染,但未被过滤add_filter( \'post_gallery\', \'cleaner_gallery\