2017-06-05 38 views
0

覆蓋的功能。但是在安裝之後,我發現這個主題禁用了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

回答

1

因爲有問題的功能是包裹在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」)。這可以作爲「劫持」父主題的鉤子(如果刪除操作由於某種原因而不起作用)的替代方法是有用的。 –