删除由插件添加的筛选器

时间:2019-11-21 作者:Gregory

我使用的插件添加了此过滤器:

$this->base    = \'hotel-room\';
$this->taxBase = \'hotel-room-category\';
add_filter( \'single_template\', array( $this, \'registerSingleTemplate\' ) );
我想删除此筛选器,因为我想能够在我的子主题中管理此文件。

筛选器是此类的一部分:

class HotelRoomRegister implements Lib\\PostTypeInterface {
    /**
     * @var string
     */
    private $base;
    /**
     * @var string
     */
    private $taxBase;

    public function __construct() {
        $this->base    = \'hotel-room\';
        $this->taxBase = \'hotel-room-category\';

        add_action( \'admin_menu\', array( $this, \'removeLocationTagMetaBox\' ) );
        add_action( \'admin_menu\', array( $this, \'removeExtraServicesTagMetaBox\' ) );
        add_action( \'admin_menu\', array( $this, \'removeReviewTagMetaBox\' ) );

        add_filter( \'single_template\', array( $this, \'registerSingleTemplate\' ) );
    }
我在函数中添加了以下内容。php在我的孩子主题中,但它不会改变任何东西:

global $HotelRoomRegister;
remove_filter( \'single_template\', array( \'hotel-room\', \'registerSingleTemplate\' ) );
我怎样才能做到这一点?

此外,如果有帮助,下面是链接到同一类中此筛选器的函数:

public function registerSingleTemplate( $single ) {
    global $post;

    if ( isset( $post ) && $post->post_type == $this->base ) {

        if ( ! file_exists( get_template_directory() . \'/single-\' . $this->base . \'.php\' ) ) {
            return MIKADO_HOTEL_CPT_PATH . \'/hotel-room/templates/single-\' . $this->base . \'.php\';
        }
    }

    return $single;
}

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

因此,在进行一些挖掘之后,您可以找到asnwer,而不是删除过滤器,您可以覆盖single\\u template过滤器来添加您自己的自定义模板。

add_filter( \'single_template\', \'my_custom_single_template\', 99, 1 );

function my_custom_single_template( $single ) {

    global $post;

    if ( isset( $post ) && $post->post_type == \'hotel-room\' ) {
        $single = require_once( STYLESHEETPATH . \'/single-hotel-room.php\');
    }

    return $single;
}