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'; 
} 
同级文件加载

我不想在稍后进行任何主题更新的情况下编辑原始主题代码,这些更改将被删除。所以我需要从儿童主题中找到一个解决方案。

感谢

+0

在'remove_action'调用的函数名是你自己的函数名称,而不是从一个父主题......它应该是'remove-elements-from-vc' – naththedeveloper

+1

等等...在函数名中做破折号甚至工作? – naththedeveloper

+0

我的不好,我在这里写了错误的函数名称,在我称之为正确函数的原始文件中。 – Joey

因为有问题的功能是包裹在if (! function_exists(''))(读:“如果这个功能不存在”),你应该能够父做之前声明它。这会阻止父函数内部的代码被运行。

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

您将添加这样的事情对你的孩子主题的functions.php文件:

function remove_elements_from_vc() { 
    return; 
} 

然而,你应该remove_action()工作为好。在父主题的函数被挂钩之前,可能你正在挂接函数。在添加之后,您无法删除操作,直到。从the codex

  1. 您可能需要拆除行动的优先次序,以添加了动作后发生的钩子。
  2. 您不能成功地删除动作已被添加之前。
  3. 运行后您也无法删除操作。
  4. 要删除的优先行动必须优先级与最初添加的功能相匹配。

如果是这样,你可以尝试用一个较低的优先级将其添加的情况:

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'); 
} 
+0

谢谢@DaveLak,我在我的孩子主题中创建了该函数,并给它一个优先级5,并且它工作。 – Joey

+0

太好了,你根本不需要把这个空的函数加入到动作中。你所做的只是在父母面前宣布。当'functions.php'运行时,函数被加载到内存中并且“存在”到php中。因为PHP知道现在的函数“存在”,所以父项中的“if()”检查失败,并且该函数可能只是一个注释块。 ** TL; DR **:只需添加该功能,即可设置。 – DaveLak

+0

@ Joey- +1 - 和两条评论:1.'-'是非法/不能运行的,所以你是对的 - 那必须是一个错字,并且2.当试图确定一个钩子挂钩为尽可能早,它可以运行(和工作)与一个大的负数(如“-9999”)。这可以作为“劫持”父主题的钩子(如果删除操作由于某种原因而不起作用)的替代方法是有用的。 –