在Wordpress中覆盖父主题函数

时间:2014-04-10 17:44:57

标签: php wordpress

我正在为我的网站使用免费的“响应式”Wordpress主题,并首次使用儿童主题。

我需要在小部件<h3>标签下添加一个div标签,但标签所在的侧边栏功能存储在父级功能中,我在覆盖我的子主题中的功能时遇到问题。 / p>

这是我必须尝试删除父项边栏功能,然后重新添加我自己的功能,但不是删除侧边栏:

添加侧边栏的原始功能看起来与我的功能child_responsive_widgets_init()完全相同,但如果有帮助则称为responsive_widgets_init()

<?php

function child_responsive_widgets_init() {

    register_sidebar( array(
                          'name'          => __( 'Main Sidebar', 'responsive' ),
                          'description'   => __( 'Area 1 - sidebar.php - Displays on Default, Blog, Blog Excerpt page templates', 'responsive' ),
                          'id'            => 'main-sidebar',
                          'before_title'  => '<div class="widget-title"><h3>',
                          'after_title'   => '</h3><em>&nbsp;</em></div>',
                          'before_widget' => '<div id="%1$s" class="widget-wrapper %2$s">',
                          'after_widget'  => '</div>'
                      ) );
}
function remove_parent_widgets() {
    remove_action( 'widgets_init', 'responsive_widgets_init' );
}
add_action('init','remove_parent_widgets');

add_action( 'widgets_init', 'parent_unregister_sidebars' );
function parent_unregister_sidebars() {
    unregister_sidebar( 'main-sidebar' );
}

add_action( 'widgets_init', 'child_responsive_widgets_init' );
?> 

2 个答案:

答案 0 :(得分:4)

我们必须wait until functions.php file is loaded,然后我们就可以拦截父母的钩子。

将此添加到您孩子的functions.php

add_action( 'after_setup_theme', 'remove_parent_hook_so_22995302' );

function remove_parent_hook_so_22995302()
{
    remove_action( 'widgets_init', 'responsive_widgets_init' );
}

答案 1 :(得分:0)

from the Question移至答案中。

感谢brasofilo和他的解决方案,我已经正确地覆盖了函数文件。如果有人想知道,请点击下面的更新代码。

function child_responsive_widgets_init() {
    register_sidebar( array(
          'name'          => __( 'Main Sidebar', 'responsive' ),
          'description'   => __( 'Area 1 - sidebar.php - Displays on Default, Blog, Blog Excerpt page templates', 'responsive' ),
          'id'            => 'main-sidebar',
          'before_title'  => '<div class="widget-title"><h3>',
          'after_title'   => '</h3><em>&nbsp;</em></div>',
          'before_widget' => '<div id="%1$s" class="widget-wrapper %2$s">',    
          'after_widget'  => '</div>'
      ) );
}
add_action('after_setup_theme','remove_parent_widgets');

function remove_parent_widgets() {
    remove_action( 'widgets_init', 'responsive_widgets_init' );
}
add_action( 'after_setup_theme', 'child_responsive_widgets_init' );