サポート » 使い方全般 » カスタムメニューのカスタムリンクのドメインの省略

  • 解決済 poncyan

    (@poncyan)


    固定ページなどでリンク設定する時は、ショートコードを使用して
    下記のようにドメイン部分を[URL]に置き換えています。
    <a href="[URL]/test/#aaa">

    カスタムメニューでページ内リンクを設定するために
    カスタムリンクでURLを入力していますが
    こちらのURLのドメイン部分もショートコードなどで置き換えたいです。
    (階層が変わることもあるため、相対パスは使用したくありません。)

    今はカスタムリンクのURLにはこのように入力しています。
    https://ドメイン.com/test/#aaa
    ↓↓↓↓↓このような形でドメインを使用しない方法でURLを指定したいです。
    [URL]/test/#aaa

    • このトピックはponcyanが3ヶ月、 1週前に変更しました。
    • このトピックはponcyanが3ヶ月、 1週前に変更しました。
    • このトピックはponcyanが3ヶ月、 1週前に変更しました。
    • このトピックはponcyanが3ヶ月、 1週前に変更しました。
9件の返信を表示中 - 1 - 9件目 (全9件中)
  • こんにちは

    下記コードでカスタムリンクメニューの 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">とすれば良いのではないでしょうか。
    リンク元の階層に関係なく、常にルートディレクトリからのリンク先を指定できます。

    スレッド開始 poncyan

    (@poncyan)

    ishitaka (@ishitaka)さん
    ありがとうございます。
    子テーマの functions.phpに記述してみましたが、
    このように出力されてしまいました。
    <a href="http://[URL]/test/#aaa">

    カスタムリンクのURLに入れるものはこちらであっていますか?
    [URL]/test/#aaa

    • この返信は3ヶ月、 1週前にponcyanが編集しました。
    スレッド開始 poncyan

    (@poncyan)

    munyagu (@munyagu)さん

    ご返信ありがとうございます。
    テスト環境などで階層自体が変わってしまうため
    ルートパスも使用したくないと思っています。

    カスタムリンクのURLに入れるものはこちらであっていますか?
    [URL]/test/#aaa

    はい、URL ショートコードを展開するようにしています。
    URL ショートコードは組み込まれていますか (add_shortcode( ‘URL’, …)?

    スレッド開始 poncyan

    (@poncyan)

    URL ショートコードは組み込まれていますか (add_shortcode( ‘URL’, …)?

    こちら組み込まれていませんでした。失礼いたしました。
    無事に正しく表示されました。どうもありがとうございました。

    スレッド開始 poncyan

    (@poncyan)

    補足
    私の場合、プラグインの「Shortcode in Menus」を有効にすると
    ショートコードが使用できました。

    無効にするとこのように「http://[URL]/ 」
    「http://」が前についてしまいました。

    • この返信は3ヶ月、 1週前にponcyanが編集しました。
    • この返信は3ヶ月、 1週前にponcyanが編集しました。

    無効にするとこのように「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 );
    スレッド開始 poncyan

    (@poncyan)

    大変助かりました。
    ありがとうございます!
    プラグイン使用せずできました。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • このトピックに返信するにはログインが必要です。