我使用的插件添加了此过滤器:
$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;
}
最合适的回答,由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;
}