web-dev-qa-db-ja.com

WordPressのメニュー機能をプラグインに置き換える

私はWordPress専用のStackExchangeがあることに気づく前に、StackOverflow.comで以前にこれを尋ねました。これは古い質問へのリンクです(モデレータの削除)。

https://stackoverflow.com/questions/6862887/replacing-wordpress-core-functionality-with-a-plugin

カスタムメニューレイアウト用のWordPressプラグインを作成しています。このメニューをテーマに直接簡単に実装できること、そしてwp_nav_menu()の機能と制限事項について詳しく説明しました。さらに、デフォルトのWordPressメニューを置き換えるためにすでに作成されたすべてのプラグインを試してテストしました。 。

私のクライアントはいくつかの異なるWordPressサイトに実装するのでプラグインを使用したいと思います。それらの多くは異なるテーマで実行されています - そしてそれらのほとんどは私が作成していないテーマです。将来それらが主題を更新する場合。

メニューをテーマに実装する方法を調べたとき、メニュー表示時に呼び出されるフックやフィルタがないため、2つの良い方法しかないことがわかりました。 1つ目はテーマを変更してプラグインを探すことです(これはPixoPointや他の多くのメニュープラグインで使用されている方法と似ています)。

header.php:

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

2番目のメソッドはwalkerクラスです。

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()関数を置き換えることを望みます。これは、テーマファイルを編集する必要なしに、大部分のテーマに対する私のプラグインサポートを与えるからです。これを行うための良い方法はありますか?それとも私が見ていないメニュープラグインを書くためのより良い方法はありますか?

1
stevendesu

Err ...メニューシステムにはたくさんのフィルタがあります。

'wp_nav_menu'フィルタは、wp_nav_menu()関数呼び出しの出力で呼び出されます。あなたがメニューの出力を変更する必要があるのであれば、あなたはそれを使用することができます。

'wp_nav_menu_items'フィルタは、結果として得られるアイテムの配列(基本的にはすべてのLIアイテム)に対して呼び出されます。

動的に独自のウォーカーを追加するなど、wp_nav_menuに渡された引数を変更する必要がある場合は、そのために 'wp_nav_menu_args'フィルタを使用できます。

もっと具体的でもっと微妙な方法で物事を変更するためにおそらく使用できるもっとたくさんのフィルタがあります。これらは、全体を変える主なクラブ風のフィルタです。

2
Otto