我正在创建一个flowmaster主题的子主题。我有一个问题要覆盖父函数。 该函数存在于父主题中:
add_filter('loop_shop_columns', 'pt_loop_shop_columns');
function pt_loop_shop_columns(){
if ( 'layout-one-col' == pt_show_layout() ) return 4;
else return 3;
}
我在子主题中添加了一个函数
if ( ! function_exists( 'pt_loop_shop_columns' ) ) :
function pt_loop_shop_columns(){
global $wp_query;
if ( 'layout-one-col' == pt_show_layout() ) return 4;
else return 4;
}
endif;
add_filter('loop_shop_columns', 'pt_loop_shop_columns');
出现此错误:
致命错误:无法重新声明pt_loop_shop_columns()(之前 声明 C:\ XAMPP \ htdocs中\ futuratab \可湿性粉剂内容\主题\流动比率胎\的functions.php:44) 在 C:\ XAMPP \ htdocs中\ futuratab \可湿性粉剂内容\主题\流动比率\ woofunctions.php 第9行
请帮忙。谢谢
答案 0 :(得分:1)
首先执行子主题的功能,然后执行父主题的功能。使用function_exists
进行检查应该是在父主题中完成的。
要解决此问题,您可以删除父主题的钩子并将自定义函数挂钩到相同的过滤器。
remove_filter('loop_shop_columns', 'pt_loop_shop_columns');
add_filter('loop_shop_columns', 'custom_pt_loop_shop_columns');
function custom_pt_loop_shop_columns(){
global $wp_query;
if ( 'layout-one-col' == pt_show_layout() ) return 4;
else return 4;
}
答案 1 :(得分:0)
您无法在PHP中重新定义函数,但是您可以取消挂起旧函数并使用其他名称挂钩新函数。类似的东西:
remove_filter('loop_shop_columns', 'pt_loop_shop_columns');
add_filter('loop_shop_columns', 'pt_loop_shop_columns_2');
答案 2 :(得分:0)
你可以在你的孩子主题上试试这个
function pt_loop_shop_columns() {
//NEW CODE IN HERE///////////////////////////////
return apply_filters('pt_loop_shop_columns', $link, $id);
}
add_filter('attachment_link', 'pt_loop_shop_columns');
或强>
你可以在现有功能上使用钩子
function pt_loop_shop_columns() {
//code goes here
}
$hook = 'get_options'; // the function name you're filtering
add_filter( $hook, 'pt_loop_shop_columns' );
或
最后一种方法是
function remove_thematic_actions() {
remove_action('thematic_header','thematic_blogtitle',3);
}
// Call 'remove_thematic_actions' during WP initialization
add_action('init','remove_thematic_actions');
// Add our custom function to the 'thematic_header' phase
add_action('thematic_header','fancy_theme_blogtitle', 3);