サポート » 使い方全般 » カスタムフィールドで特定のkey(複数)だけの一覧を出力かつ数字の高い

  • 解決済 yamapkomkom

    (@yamapkomkom)


    カスタムフィールドで特定のkeyだけの一覧を出力したいのですが、以前KZさんの回答をみてやってみましたがうまくいきません。
    特定の二つのkeyを取得しそれを数で降順にできればと思っておりますがお知恵を拝借できませんんでしょうか?

    年齢しか取得できず、これにkey=名前というの二つのカスタムフィールドの値を取得したいと思っております。
    降順ソートは、「年齢」の数字でしたいです。

    <ul>
    <?php
    query_posts('posts_per_page=-1&meta_key=年齢&order=DESC');
    while(have_Posts()) :
      the_post();
      $speaker = get_post_meta($post->ID, '年齢', true);
      ?>
      <li><a href="<?php the_permalink() ?>"><?php echo $speaker ?></a></li>
      <?php
    endwhile;
    wp_reset_query();
    ?>
    </ul>

    ご教授いただければ幸いです。
    あまりワードプレスの知識がないためわかり易くだとすごいうれしいです。

    何卒お願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター のむらけい (Kei Nomura)

    (@mypacecreator)

    KZさんの回答ということだとけっこう前の回答かもしれませんが、現在カスタムフィールドまわりの記事取得の仕組みはかなりアップデートされています。

    ご希望の、カスタムフィールドの値を数値とみなしてソートするような仕組みも標準で備わっています。

    ここにいろいろなサンプルコードがあります。

    関数リファレンス/WP Query – WordPress Codex 日本語版
    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/WP_Query#Custom_Field_Parameters

    たとえば単純に年齢の高い順にしたいなら

    <?php $args = array(
    	'posts_per_page' => -1,
    	'orderby'   => 'meta_value_num', //カスタムフィールドの「数字順」に並べ替えなさいという指示
    	'meta_key'  => '年齢', //カスタムフィールドキーを指定
            'order'=> 'DESC' //降順、つまり年齢高い順
    );
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) :
    while ( $query->have_posts() ) : $query->the_post(); ?>
    ※ループの中身
    <?php endwhile;
          wp_reset_postdata();
          endif; ?>

    yamapkomkomさんのご希望だとちょっと条件が複雑ですが。。。
    「年齢」の高い順に並べたいということだと思いますが、「名前」の用途はどのようなものでしょうか。
    (名前はソートに使う?それともある名前の人だけを抽出する?ただ出力できればOK?)
    それがわかるともう少し具体的にアドバイスできると思います。

    仮に「太郎」という名前の人を年齢順に並べるということなら

    <?php $args = array(
    	'posts_per_page' => -1,
    	'meta_query' => array(
    		'relation' => 'AND', //以下の2つの条件を両方満たすもの
    		array(
    			'key'     => '名前', //カスタムフィールドのキー名
    			'value'   => '太郎', //カスタムフィールドの値
    			'compare' => 'LIKE', //一致するもの
    		),
    		array(
    			'key'     => '年齢',
    			'value'   => true //年齢の入力があるもののみ
    		),
    	'orderby'   => 'meta_value_num', //カスタムフィールドの「数字順」に並べ替えなさいという指示
    	'meta_key'  => '年齢', //カスタムフィールドキーを指定
            'order'=> 'DESC' //降順、つまり年齢高い順
    );
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) :
    while ( $query->have_posts() ) : $query->the_post(); ?>
    ※ループの中身
    <?php endwhile;
          wp_reset_postdata();
          endif; ?>

    という感じでしょうか。
    query_postsを使った記述は少し古いやり方なので、new WP_Queryを使った書き方に変更しています。

    *少し高度な参考サイト
    query_postsを使用せずにカスタムフィールドの値で絞込みをして記事を表示する | たむらんち
    http://www.tamura.tottori.jp/2015/10/02/get-custom-field-post/

    mypacecreator様

    詳しいご指導ありがとうございます!
    カスタムフィールドの年齢の値の高い順によって名前がソートされる仕組みを考えておりました。

    99歳 サイトウ
    98歳 ヤマダ
    97歳 イシダ


    <?php $args = array(
    	'posts_per_page' => -1,
    	'orderby'   => 'meta_value_num', //カスタムフィールドの「数字順」に並べ替えなさいという指示
    	'meta_key'  => '年齢', //カスタムフィールドキーを指定
            'order'=> 'DESC' //降順、つまり年齢高い順
    );
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) :
    while ( $query->have_posts() ) : $query->the_post(); ?>
    ※ループの中身
    <?php endwhile;
          wp_reset_postdata();
          endif; ?>

    上記で表示はされたのですが、
    リストが300ぐらいありまして、所々数字が取得できていない部分がありました。
    ・DBには数字は入っている。
    ・全角ではないです。

    固定ページで表示をしているのですが、カスタムフィールドの値が所々取得できないのは何か問題を考えられますでしょうか?

    その取得できていない各エントリーの個別記事ページにて、

    get_post_meta( get_the_ID(), '年齢');

    等とした場合正しくデータは取得出来ているでしょうか?

    Toro_Unit (Hiroshi Urabe)様

    解決できました。
    データはとれていたのですが下書き保存でプレビューから公開にするとすべてのデータがとることができました。

    ありがとうございます!

    mypacecreator様 Toro様 誠にありがとうございました。

    これにてこのスレッドしめさせていただきます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「カスタムフィールドで特定のkey(複数)だけの一覧を出力かつ数字の高い」には新たに返信することはできません。