• こんにちは。
    WP3.8+Twenty Ten1.6を使用しています。
    カスタムメニュー(外観→メニュー)を使ってみようと思っています。
    リンクのURLをPHPで取得して、メニューに表示したいのですが、方法はありますでしょうか。
    例えば、

    “>リンク

    のようなコードをメニューに入れたいのです。
    そうした機能を追加してくれるプラグインがあればと思ったのですが、見つかりませんでした。
    よろしくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック投稿者 narururu

    (@narururu)

    すみません、タグの書き方が不適切だったので、もう一度投稿します。

    WP3.8+Twenty Ten1.6を使用しています。
    カスタムメニュー(外観→メニュー)を使ってみようと思っています。
    リンクのURLをPHPで取得して、メニューに表示したいのですが、方法はありますでしょうか。
    例えば、

    “>リンク&lt/a>

    のようなコードをメニューに入れたいのです。
    そうした機能を追加してくれるプラグインがあればと思ったのですが、見つかりませんでした。
    よろしくお願いいたします。

    トピック投稿者 narururu

    (@narururu)

    何度も済みません・・・。
    コードは下記です。

    <a href="<?php ・・・?>">リンク</a>

    URLを弄るならフィルターフック nav_menu_link_attributes が使えると思います。
    希望とは違ってしまいますが、特定のキーワードを対応する URL に変換する案を。
    テストしていませんので動作保証はしかねますが、何かのヒントになれば。

    <?php
    /*
    Plugin Name: Convert Keywords to URL in Nav Menu
    Usage: このプラグインをコピペした PHP ファイルを UTF-8 で保存し、 wp-content/plugins/ 以下にインストール後、有効化してください。
    */
    
    function cknm_filter_nav_menu_link_attributes( $atts ) {
        if ( isset( $atts['href'] ) && !empty( $atts['href'] ) ) {
            // %HOME_URL% のようなキーワードを対応するURLに変換
            $atts['href'] = preg_replace_callback( '/%([0-9a-zA-Z_]+)%/', '_cknm_callback_assign_keywords', $atts['href'] );
    
            // 連続する protocol:// を削除 ※適当
            $protocols    = implode( '|', wp_allowed_protocols() );
            $atts['href'] = esc_url( preg_replace( '#^((' . $protocols . ')://)+((' . $protocols . ')://)#', '$3', $atts['href'] ) );
        }
        return $atts;
    }
    
    function _cknm_callback_assign_keywords( $match ) {
        $search   = $match[1];
        $keywords = array(
            'HOME_URL'     => home_url('/'),
            'TEMPLATE_URL' => get_template_directory_uri(),
            'ADMIN_URL'    => admin_url('/'),
            // 必要に応じて変換するキーワードとURLを連想配列に追加してください
            // 'CUSTOM_POST_TYPE_ARCHIVE' => get_post_type_archive_link( 'custom_post_type' )
        );
        // 定義されていないキーワードはそのまま返す
        return ( isset( $keywords[$search] ) ) ? $keywords[$search] : $match[0];
    }
    
    // nav_menu_link_attributes フックにフィルターを追加
    add_filter( 'nav_menu_link_attributes', 'cknm_filter_nav_menu_link_attributes' );

    カスタムメニュー編集ページの URL 欄では、保存すると http://%HOME_URL% みたいな風に表示されてしまうんじゃないかと思いますが、実際のメニュー上ではキーワードの変換後に冒頭で連続する http:// は多分削除するので気にしないでください。

    申し訳ありませんが私はこれにて。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタムメニューにPHP」には新たに返信することはできません。