サポート » 使い方全般 » カスタムフィールドへのリンク

  • プラグインやfunction.phpに追記する方法で管理画面の記事一覧にカスタムフィールドを表示させることはできたのですが、それ自体にリンク?をさせることはできるのでしょうか?

    タイトル 作成者 カテゴリー 日時 都道府県(カスタムフィールド)
    明日の天気 佐藤 天候 2015/01/21 山口県

    上記のような記事一覧があったとします。
    明日の天気や佐藤といった値には記事のリンクが貼られているのですが、カスタムフィールドの山口県のみリンクがありません。

    これをリンク表示にしたいのです。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター gatespace

    (@gatespace)

    カスタムフィールドは(の集まり、アーカイブ)は作成されないので、当然、リンクを提供するようなテンプレートタグもありません。

    方法1
    カスタムフィールドを諦めて、カスタムタクソノミーで作り直す

    方法2
    カスタムフィールドでそのままやるなら、
    1. 固定ページなどで特定のカスタムフィールドの同じ値を持つ投稿を表示するようなPHPコードを頑張って書く
    (当然都道府県はいっぱいあるので、47個作らないといけない)
    2.投稿のページからはその固定ページに行くようにリンクを作る

    まだ、そんなに投稿を作っていないのであれば方法1に方針を変えたほうが後々楽です

    モデレーター Takuro Hishikawa

    (@hissy)

    ほい、こんな感じ。都道府県のカスタムフィールドのキーを prefecture としていますので、そこは適宜変更してください。

    <?php
    /*
    Plugin Name: 管理画面の記事一覧にカスタムフィールドへのリンクを追加
    */
    
    // 管理画面の記事一覧に都道府県カラムを追加
    add_filter( 'manage_posts_columns', function($posts_columns, $post_type) {
        return array_merge( $posts_columns, array('prefecture' => '都道府県') );
    }, 10, 2);
    
    // 管理画面の都道府県カラムに表示する内容
    add_action( 'manage_posts_custom_column', function($column_name, $post_id) {
        if ($column_name == 'prefecture') {
            $post = get_post($post_id);
            if (isset($post->prefecture)) {
                $url = admin_url( 'edit.php?meta_key=prefecture&meta_value=' . $post->prefecture );
                echo sprintf(
                    '<a href="%s">%s</a>',
                    esc_url($url),
                    esc_html($post->prefecture)
                );
            }
        }
    }, 10, 2 );
    
    // 管理画面でカスタムフィールドのパラメーターを許可する
    add_filter('query_vars', function($public_query_vars) {
        if (is_admin()) {
            $public_query_vars[] = 'meta_key';
            $public_query_vars[] = 'meta_value';
        }
        return $public_query_vars;
    });
    モデレーター gatespace

    (@gatespace)

    ダッシュボードの方でしたか。
    (とはいえ個人的にはタクソノミーのほうが向いてる気もしますが・・・。)

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カスタムフィールドへのリンク」には新たに返信することはできません。