添加过滤器,除非它是在特定函数下调用的

时间:2015-05-18 作者:Adam Capriola

我想添加一个筛选器。。。但如果该过滤器由特定函数调用,则不会。下面是一个简化的示例:

<?php

add_filter( \'get_the_excerpt\', \'wp_trim_excerpt\' );
function wp_trim_excerpt( $text ) {

    $text = apply_filters( \'the_content\', $text );

    return $text;

}

add_filter( \'the_content\', \'my_content_filter\' );
function my_content_filter( $content ) {

    // my code that modifies $content

    return $content;

}
有没有办法检查一下my_content_filter 正在由发起wp_trim_excerpt 在运行我的代码之前?

编辑:编辑core function wp_trim_excerpt 在这里起作用,所以如果可能的话,我不想改变函数。以上我将其简化为最相关的部分。

2 个回复
SO网友:Sumit

WordPress只保存hooks 全球信息$wp_filter 因此,您可以检查挂钩是否注册了某个指定的函数。您还可以使用函数has_filter.

但我想你不能检查,它是否在某个特定的执行点上被调用。

但您可以使用全局变量对PHP执行此操作。

检查此代码

add_filter( \'get_the_excerpt\', \'my_trim_excerpt\' );
function my_trim_excerpt($text) {
    global $filter_applied;
    $filter_applied = true;

    $text = wp_trim_excerpt($text);

    return $text;
}

add_filter( \'the_content\', \'my_content_filter\' );
function my_content_filter( $content ) {
    global $filter_applied;

    if (isset($filter_applied) && $filter_applied === true) {
        //Your code when wp_trim_excerpt is already called.
    }

    //my code that modifies $content

    return $content;
}
这里我使用一个全局变量$filter_applied 和修改上的值wp_trim_excerpt 然后检查它my_content_filter

SO网友:Adam Capriola

下面是我最后做的:

<?php

add_filter( \'get_the_excerpt\', \'wp_trim_excerpt\' );
function wp_trim_excerpt( $text ) {

    remove_filter( \'the_content\', \'my_content_filter\' );
    $text = apply_filters( \'the_content\', $text );
    add_filter( \'the_content\', \'my_content_filter\' );

    return $text;

}

add_filter( \'the_content\', \'my_content_filter\' );
function my_content_filter( $content ) {

    // my code that modifies $content

    return $content;

}
我不想直接编辑wp_trim_excerpt 函数,因为它是WordPress的核心函数(为了清晰起见,我在这里对其进行了简化)。然而,我想不出任何其他的好方法来做到这一点。所以我去掉了原来的get_the_excerpt WordPress核心中的过滤器,然后在我的主题文件中复制该功能,并进行编辑,然后重新应用过滤器。

结束

相关推荐

Search with filters and title

我想搜索custom_post 按标题和ACF字段。所以,我用了WP_Query WordPress函数,但我不能按标题过滤,只能按过滤器过滤。当我提交表单时,我有这样的URL:http://example.com/?s=titre&filter1=condition1&filter2=condition2&filter3=condition3 我的代码:$title = $_GET[\'s\']; $args = array( \'pagenam