2011-07-28 13 views
1

私はカスタムメニューレイアウトのWordPressプラグインを作成しています。私は、このメニューをテーマに直接簡単に実装できることをよく知っており、wp_nav_menu()の機能と制限をかなり徹底的に読んだ上で、デフォルトのWordPressメニューを置き換えるためにすでに作成したすべてのプラグインを試してみました。WordPressのコア機能をプラグインに置き換える

クライアントがいくつかの異なるWordPressサイトでこれを実装しているので、私はプラグインを使いたいと思っています。その多くは異なるテーマで動作しています。そのほとんどは私が作成しなかったテーマで、将来テーマを更新する場合に備えてコードを記述してください。

テーマにメニューを実装する方法を検討したところ、メニュー表示時にフックやフィルタが呼び出されないため、2つの方法があることがわかりました。最初は(これはPixoPointと他の多くのメニューのプラグインが使用する方法と同様である)のプラグインを探しにテーマを変更することです:

header.php: 

if(function_exists('pixopoint_menu')){ 
    pixopoint_menu(); 
} else { 
    wp_nav_menu(); 
} 

第2の方法は、歩行者クラスです:

plugin.php: 

class my_walker_class Extends Walker_Nav_Menu { 
    function start_el(&$output, $item, $depth, $args) { 
     /* 
     * Etc. Etc. 
     */ 
    } 
} 

header.php: 

wp_nav_menu(Array('walker' => 'my_walker_class')); 

ただし、これらの方法の両方に標準のheader.phpファイルを変更する必要があることに注意してください。

私のプラグインがロードされている場合、理想的にはwp_nav_menu()関数を置き換えたいと思っています。これは、テーマファイルを編集することなく大部分のテーマをサポートします。これを行う良い方法はありますか?それとも、私が見ていないメニュープラグインを書く良い方法はありますか?

答えて

2

wp_nav_menu_argsフィルタを使用して、wp_nav_menuに渡された引数を変更して、カスタムウォーカークラスを指定できます。

add_filter('wp_nav_menu_args', 'my_wp_nav_menu_args_filter'); 
function my_wp_nav_menu_args_filter($args = array()) { 
    $args['walker'] = new my_walker_class(); 
    return $args; 
} 
+0

ありがとう。私はこれが私を逃すことは信じられない。何らかの理由で私は自分のウォーカークラスを渡すためにそのフィルタを使用することができないことを理解していない...それはワードプレスになると私は本当に愚かです... – stevendesu

関連する問題