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様 誠にありがとうございました。
これにてこのスレッドしめさせていただきます。