こんにちは
下記コードでカスタムリンクメニューの URL で URL ショートコードが展開されるようになります。
子テーマの functions.php に、
add_filter( 'wp_nav_menu_objects', function( $sorted_menu_items, $args ) {
foreach ( $sorted_menu_items as $item ) {
if ( 'custom' === $item->type ) {
if ( false !== strripos( $item->url, '[URL]' ) ) {
$item->url = esc_url_raw( do_shortcode( $item->url ) );
}
}
}
return $sorted_menu_items;
}, 10, 2 );
階層が変わることもあるため、相対パスは使用したくありません。
ということですが、ここでの階層はリンク先の階層ではなく、リンク元のかいそうということですよね?
(リンク先の階層が変わるとどうせリンクは書き直さないといけないので)
であれば、
<a href="/test/#aaa">
とすれば良いのではないでしょうか。
リンク元の階層に関係なく、常にルートディレクトリからのリンク先を指定できます。
ishitaka (@ishitaka)さん
ありがとうございます。
子テーマの functions.phpに記述してみましたが、
このように出力されてしまいました。
<a href="http://[URL]/test/#aaa">
カスタムリンクのURLに入れるものはこちらであっていますか?
[URL]/test/#aaa
munyagu (@munyagu)さん
ご返信ありがとうございます。
テスト環境などで階層自体が変わってしまうため
ルートパスも使用したくないと思っています。
カスタムリンクのURLに入れるものはこちらであっていますか?
[URL]/test/#aaa
はい、URL ショートコードを展開するようにしています。
URL ショートコードは組み込まれていますか (add_shortcode( ‘URL’, …)?
URL ショートコードは組み込まれていますか (add_shortcode( ‘URL’, …)?
こちら組み込まれていませんでした。失礼いたしました。
無事に正しく表示されました。どうもありがとうございました。
補足
私の場合、プラグインの「Shortcode in Menus」を有効にすると
ショートコードが使用できました。
無効にするとこのように「http://[URL]/ 」
「http://」が前についてしまいました。
無効にするとこのように「http://[URL]/ 」
「http://」が前についてしまいました。
こちらは、下記コードでプラグインと同じことができると思います。
add_action('wp_update_nav_menu_item', function( $menu_id, $menu_item_db_id, $args ) {
if ( 'custom' === $args['menu-item-type'] ) {
if ( 0 === strripos( $args['menu-item-url'], '[URL]' ) ) {
update_post_meta( $menu_item_db_id, '_menu_item_url', str_replace( array( 'http://', 'https:// '), '', esc_url_raw( $args['menu-item-url'] ) ) );
}
}
}, 10, 3 );
大変助かりました。
ありがとうございます!
プラグイン使用せずできました。