2017-06-05 20 views
0

私はVisual Composerを使用している私の単語のプレスにテーマをインストールしました。しかし、それをインストールした後、テーマは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'); 
} 

これを引き起こしている機能アクションは "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

あなた '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 - と2つのコメント:1. '-'は不正である/実行されないので正しいです - それはタイプミスでなければなりませんでした。2.フックが可能な限り早く、大きな負の数( '-9999'など)で実行(および動作)することができます。これは、親テーマのフックを "乗っ取る"ための別の方法として便利です(何らかの理由で削除アクションが機能しなかった場合)。 –

関連する問題