WordPress的从我已经安装使用可视化编辑器对我的话按主题父主题
覆盖的功能。但是在安装之后,我发现这个主题禁用了Visual Composer的某些元素。退出一段时间后,我发现正在执行的文件删除这些元素。WordPress的从我已经安装使用可视化编辑器对我的话按主题父主题
我为了覆盖此功能,但没有运气创建子主题。
原有的功能是这样的:
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');
}
导致此功能行动是在一个名为“视觉作曲家-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';
}
同级文件加载
我不想在稍后进行任何主题更新的情况下编辑原始主题代码,这些更改将被删除。所以我需要从儿童主题中找到一个解决方案。
感谢
因为有问题的功能是包裹在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');
}
谢谢@DaveLak,我在我的孩子主题中创建了该函数,并给它一个优先级5,并且它工作。 – Joey
太好了,你根本不需要把这个空的函数加入到动作中。你所做的只是在父母面前宣布。当'functions.php'运行时,函数被加载到内存中并且“存在”到php中。因为PHP知道现在的函数“存在”,所以父项中的“if()”检查失败,并且该函数可能只是一个注释块。 ** TL; DR **:只需添加该功能,即可设置。 – DaveLak
@ Joey- +1 - 和两条评论:1.'-'是非法/不能运行的,所以你是对的 - 那必须是一个错字,并且2.当试图确定一个钩子挂钩为尽可能早,它可以运行(和工作)与一个大的负数(如“-9999”)。这可以作为“劫持”父主题的钩子(如果删除操作由于某种原因而不起作用)的替代方法是有用的。 –
在'remove_action'调用的函数名是你自己的函数名称,而不是从一个父主题......它应该是'remove-elements-from-vc' – naththedeveloper
等等...在函数名中做破折号甚至工作? – naththedeveloper
我的不好,我在这里写了错误的函数名称,在我称之为正确函数的原始文件中。 – Joey