質問: ブログのurlに相対的なurlでメニューにカスタムリンクを追加する方法 私の仕事の一部はwordpressのウェブサイトを作成することです。私は通常クライアントがそれをレビューするテストサーバーにアップロードされるのに十分な何かがあるまで私のラップトップで作業します。私はいつもhttp://local.example.com/のようなドメインでwordpressのインストールをしているので、私は新しいプロジェクトごとにvirtualhostを作成しています。 http://testserver.com/arbitrary/path/example/。問題は、たとえば/events/を指すカスタムリンクをメニューに追加すると、ローカルでhttp://local.example.com/events/へのリンクを作成することで問題なく機能することですが、テストサーバーでは、リンクがhttp://testserver/events/を指すことは明らかです。右。 私が欲しいのは私のローカル環境とテストサーバーの両方で機能するurlをカスタムリンクに与えることです。 私はhomeとsiteurlのwordpressオプションを以下のように変更する問題をすでに処理しています。 ローカルデータベースの設定を変更する データベースのダンプを作成する サーバー上のデータベースを更新する ローカルオプションを復元します。 カスタムリンクに完全なurlを使用したくないし、サーバーのデータベースを更新する必要があるたびにそれらをサーバーのurlに置き換える必要もありません。投稿コンテンツ内のリンクには、2つのショートコードを追加することで問題を解決するプラグインがあります。 http://wordpress.org/extend/plugins/url-shortcodes/ カスタムリンクの場合も同様です。
回答: nav_menu_link_attributesフィルタを使用して、各メニュー項目のhref属性を検査して出力する前に変更することができます。この例では、/で始まるhref属性を探し、その場合はテストサイトのurlを先頭に追加します。function wpd_nav_menu_link_atts( $atts, $item, $args, $depth ){ if( '/' == substr( $atts['href'], 0, 1 ) ){ $atts['href'] = 'http://testserver.com/example' . $atts['href']; } return $atts; } add_filter( 'nav_menu_link_attributes', 'wpd_nav_menu_link_atts', 20, 4 ); このコードで簡単なプラグインを作成してテストサーバー上でのみアクティブにすることも、テストサイト環境が存在するときに条件付きでこのフィルタを適用するある種のフラグを作成することもできます。