Wordpress覆盖父主题

时间:2017-06-05 12:08:16

标签: wordpress themes visual-composer

我在使用Visual Composer的word press上安装了一个主题。但是在安装之后我发现主题已经禁用了Visual Composer中的一些元素。退出一段时间后,我发现正在执行的文件删除这些元素。

我创建了一个子主题,以便覆盖此功能,但没有运气。

原始功能如下:

if ( ! function_exists('remove-elements-from-vc') ) {

function remove-elements-from-vc() {

    /*** Remove Grid Elements if grid elements disabled */
    vc_remove_element('vc_basic_grid');
    vc_remove_element('vc_media_grid');
    vc_remove_element('vc_masonry_grid');
    vc_remove_element('vc_masonry_media_grid');
    vc_remove_element('vc_icon');
    vc_remove_element('vc_button2');
    vc_remove_element("vc_custom_heading");

    /*** Remove unused parameters from grid elements */
    if (function_exists('vc_remove_param')) {
        vc_remove_param('vc_basic_grid', 'button_style');
        vc_remove_param('vc_basic_grid', 'button_color');
        vc_remove_param('vc_basic_grid', 'button_size');
        vc_remove_param('vc_basic_grid', 'filter_color');
        vc_remove_param('vc_basic_grid', 'filter_style');
        vc_remove_param('vc_media_grid', 'button_style');
        vc_remove_param('vc_media_grid', 'button_color');
        vc_remove_param('vc_media_grid', 'button_size');
        vc_remove_param('vc_media_grid', 'filter_color');
        vc_remove_param('vc_media_grid', 'filter_style');
        vc_remove_param('vc_masonry_grid', 'button_style');
        vc_remove_param('vc_masonry_grid', 'button_color');
        vc_remove_param('vc_masonry_grid', 'button_size');
        vc_remove_param('vc_masonry_grid', 'filter_color');
        vc_remove_param('vc_masonry_grid', 'filter_style');
        vc_remove_param('vc_masonry_media_grid', 'button_style');
        vc_remove_param('vc_masonry_media_grid', 'button_color');
        vc_remove_param('vc_masonry_media_grid', 'button_size');
        vc_remove_param('vc_masonry_media_grid', 'filter_color');
        vc_remove_param('vc_masonry_media_grid', 'filter_style');
        vc_remove_param('vc_basic_grid', 'paging_color');
        vc_remove_param('vc_basic_grid', 'arrows_color');
        vc_remove_param('vc_media_grid', 'paging_color');
        vc_remove_param('vc_media_grid', 'arrows_color');
        vc_remove_param('vc_masonry_grid', 'paging_color');
        vc_remove_param('vc_masonry_grid', 'arrows_color');
        vc_remove_param('vc_masonry_media_grid', 'paging_color');
        vc_remove_param('vc_masonry_media_grid', 'arrows_color');
    }
}

add_action('vc_after_init', 'remove-elements-from-vc');
}

这就是我在functions.php中的孩子主题中尝试做的事情:

add_action( 'vc_after_init', 'undo-remove-elements-from-vc' );
function undo-remove-elements-from-vc(){
    remove_action( 'vc_after_init', 'remove-elements-from-vc'); 
}

导致此操作的函数位于名为" visual-composer-config.php"的文件中。它是从一个名为" load.php"

的兄弟文件中加载的
if (visual_composer_installed()) {
include_once ELATED_FRAMEWORK_MODULES_ROOT_DIR.'/visualcomposer/visual-composer-functions.php';
include_once ELATED_FRAMEWORK_MODULES_ROOT_DIR.'/visualcomposer/visual-composer-config.php';
}

如果以后有任何主题更新,我不想编辑原始主题代码,这些更改将被删除。所以我需要找到儿童主题的解决方案。

由于

1 个答案:

答案 0 :(得分:1)

因为有问题的函数包含在if ( ! function_exists('') )中(读取:“如果此函数不存在”),您应该能够在父项之前声明它。这将阻止父函数内的代码被运行。

注意:我替换了你的连字符(-),因为我没有看到连字符语法并且认为这是一个错字。根据我的经验,使用的正确语法是下划线(_)。

您可以在子主题的functions.php文件中添加类似的内容:

function remove_elements_from_vc() {
    return;
}

但是,您的remove_action()也应该有效。在连接父主题的函数之前,你的函数可能正在挂钩。在添加 之后才能删除操作。来自the codex

  
      
  1. 您可能需要优先将操作移除到添加操作后发生的挂钩。
  2.   
  3. 在添加操作之前,您无法成功删除该操作。
  4.   
  5. 运行后也无法删除操作。
  6.   
  7. 要删除某个操作,优先级必须与最初添加的功能相匹配。
  8.   

如果是这种情况,您可以尝试以较低的优先级添加它:

add_action( 'vc_after_init', 'undo_remove_elements_from_vc', 20 );

function undo_remove_elements_from_vc(){
remove_action( 'vc_after_init', 'remove_elements_from_vc'); 
}