我在使用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';
}
如果以后有任何主题更新,我不想编辑原始主题代码,这些更改将被删除。所以我需要找到儿童主题的解决方案。
由于
答案 0 :(得分:1)
因为有问题的函数包含在if ( ! function_exists('') )
中(读取:“如果此函数不存在”),您应该能够在父项之前声明它。这将阻止父函数内的代码被运行。
注意:我替换了你的连字符(-
),因为我没有看到连字符语法并且认为这是一个错字。根据我的经验,使用的正确语法是下划线(_
)。
您可以在子主题的functions.php
文件中添加类似的内容:
function remove_elements_from_vc() {
return;
}
但是,您的remove_action()
也应该有效。在连接父主题的函数之前,你的函数可能正在挂钩。在添加 之后才能删除操作。来自the codex:
- 您可能需要优先将操作移除到添加操作后发生的挂钩。
- 在添加操作之前,您无法成功删除该操作。
- 运行后也无法删除操作。
- 要删除某个操作,优先级必须与最初添加的功能相匹配。
醇>
如果是这种情况,您可以尝试以较低的优先级添加它:
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');
}