サポート » 使い方全般 » カスタムフィールドの値を表示できない

  • カスタムフィールドの利用について、3日間考えても全然解決しないので質問させてください…。

    Toolset Types
    というプラグインを使い、カスタム投稿&カスタムフィールドを作りました。

    目的としては、
    TOPページに新着情報を表示したいので、とりあえず試験的に

    news(ポストタイプ)
     Lnews_title(フィールドスラッグ) 例:チョコレート

    を設定して、管理画面の構築は上手くできている状況です。

    その後、index.phpのループ内に以下のように記述しました

    echo post_custom(‘wpcf-news_title’);
    ※wpcf-はプラグイン依存らしいので、ありの場合となしの場合も試しました。

    私の考えだと、
    これでindex.phpに「チョコレート」と表示されると思っていたのですが、
    どうしても値を取得することができません。(ソース上にも出てきません)

    表示されるページが違うということがないように
    echo ‘てすと’;
    を併記していて、そちらは出力されているので、違う場所に出力されているということはないと思います。

    そこで考えられる可能性としては、

    1.私が何か勘違いをしていて、設定漏れがある
     (functionsを書き換えないといけないとか、DBを作らないといけないとか?)
    2.そもそも、カスタム投稿から投稿した「news_title」に値が入っていない
     (ただし、管理画面の投稿一覧から記事の存在を確認できるので可能性は低いのでは)
    3.サーバー環境が合わない(ただし、ロリポップとGMOの2サーバーで同じテストを
      しているので、可能性としては低いと思っています)
    4.タグの記載場所が違う(ただ、page-news、single-newsを作って表示してみるという
      方法もやってみましたが、こちらもダメでした)
    5.Toolset Types(プラグイン)と何かの相性が悪い
      (ただ、advanced custom fieldsも使ってみましたが、こちらもダメでした)

    など、原因があると思うのですが、
    この場合、解決の糸口はどのように見つければよいものでしょうか。

    いろいろな参考サイトも拝見しつつ設定しているのですが、
    「カスタムフィールドの値は、ループ内にpost_customを記述して取得する」
    と簡単な話だと考えていたので、まさかここまではまるとは思っておらず大変困っております。

    もしかすると、カスタムフィールドに対する理解がそもそも間違っているのかもしれず、
    恐れ入りますがアドバイスいただけると嬉しいです。
    稚拙な質問で申し訳ございません。
    よろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • ループはどのように書かれましたか?

    管理画面のポストタイプがnewsの記事編集で
    「news_title」に「チョコレート」と入力する画面のアドレスを見ていただくと
    後ろの方に「post=xxx&action=edit」と書いてあると思います。
    このxxxxの部分の数字を覚えておいてlinamiaさんが書かれた
    echo post_custom(‘wpcf-news_title’);
    の近くに
    var_dump(get_post_custom( xxxx ));
    と書いた場合に何が表示されますか?

    こんにちは

    @jdbbのおっしゃるとおり、post_customの引数は投稿のIDですのでIDを引数に指定する必要があります。
    その結果、全てのメタデータを取得できますので、下記リンクのようにカスタムフィールドの値を取得できます。
    https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/get_post_custom

    また、Toolset Typesはカスタムフィールド値を直接取得するAPIが用意されています。

    echo types_render_field('news_title', array());`

    という感じです。
    リファレンスは以下にあります。
    ちょっと分かりにくいリファレンスですが。。。
    https://wp-types.com/documentation/functions/

    トピック投稿者 linamia

    (@linamia)

    >jdbb様

    ご回答ありがとうございます!

    【ループ】
    index.phpの以下の箇所に挟んでいます。

    <?php
    			while ( have_posts() ) : the_post();
    // ここにコードを記載
    			endwhile;

    【バーダンプの結果】
    array(6) { [“_edit_last”]=> array(1) { [0]=> string(1) “1” } [“_edit_lock”]=> array(1) { [0]=> string(12) “1474091045:1” } [“_wp_old_slug”]=> array(1) { [0]=> string(54) “%e3%83%86%e3%82%b9%e3%83%88%e3%81%a0%e3%82%88%e3%82%93” } [“wpcf-news_title”]=> array(1) { [0]=> string(18) “チョコレート” } [“wpcf-news_link”]=> array(1) { [0]=> string(7) “http://&#8221; } [“wpcf-news_day”]=> array(1) { [0]=> string(10) “1473984000” } }

    今さらですがバーダンプで確認すればよかったのですね…。
    こちらを見ると、値はきちんと入っているということでしょうか。

    ちなみに、wpcf-news_linkには「http://」と入れていますので、出力結果はあっています。
    ただ、wpcf-news_dayには、日付を(2016年9月15日(だったはず)をカレンダーから選べるようにして入力しています)
    を入れているので、出力結果が不思議な感じです。

    >munyagu様

    ご回答ありがとうございます!

    今日もいろいろ試していたのですが、たまたまなのか何なのかで、
    single-news.php のループ内に

    echo get_post_meta($post->ID , ‘wpcf-news_title’ ,true);

    と記載したところ、「チョコレート(意図した値)」を取得することができました!

    ただ、教えていただいた
    echo types_render_field(‘news_title’, array());
    を挿入したところ、

    Fatal error: Call to undefined function echo types_render_field() in /home/users/0/(サーバ名).jp-dp(数字)/web/wp/wp-content/themes/ドメイン名/single-news.php on line 22

    と、挿入位置(22行目)がエラーで返されてしまいました。
    もしかして、プラグインがうまくインストールされていないのでプラグイン特有の記載が効かないなど
    そういうことなのでしょうか。

    この状況を踏まえまして、
    index.php

    news-single.php
    に同じコード(echo get_post_meta($post->ID , ‘wpcf-news_title’ ,true);)を記載しても

    index.php→出力されない
    news-single.php→出力される

    ということは、news-singleを作ることで、
    「loop内で繰り返す値(のグループのようなもの)=newsのグループ(のようなもの)からとってくださいね」
    というのを、新規ファイル(news)を作ることで紐づけているということなのでしょうか?

    おそらく基本的なところで何かわかっていない知識があるのだと思いますが、
    もし、このあたりのお話しが詳しく書いてあるようなサイトなどありましたら
    もっと勉強したいので、教えていただけると嬉しいです。

    post_customについては、私が勘違いしていたようで、投稿記事のIDが引数なのですね。
    でもそうすると、記事IDを引数として手動で入力しなくてはならないということになると思うので(違うかもしれませんが)
    フィールドスラッグを引数にできれば便利なのかな? と考えているのですが、そういうものでもないのでしょうか。

    申し訳ございませんがどうぞよろしくお願いいたします。

    linamia様の書かれているループとはおそらくwordpressをインストールしたときにある
    「投稿」のループではないでしょうか?
    ループ内で
    the_ID();
    と記載すると、投稿ID(上で書いたxxxxの数字)が違う数字が出てくるのではないかと思います。

    普通の投稿ではなく、ポストタイプ newsをループさせたい場合はfunctions.php内でpre_get_postsを使用するか
    get_postsでsetup_postdata
    を使用して$postを上書きする必要があります。

    私の場合ですが通常の投稿もindex.php内で使用する場合はget_postsを、
    ポストタイプnewsだけしかリスト表示させない場合はpre_get_postsをという感じで使い分けてます。

    ※wpcf-news_dayの入っている値はunixtimeの値かと思います。

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