覆盖Wordpress父主题功能

时间:2015-05-15 07:44:41

标签: php wordpress

我正在创建一个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行

请帮忙。谢谢

3 个答案:

答案 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);