値の入っているmeta_keyを任意で指定した数だけ取得したい
-
はじめまして。
貴重な場所をお借りします。
どうぞ宜しくお願い致します。カスタムフィールドテンプレートでmultiple = trueに指定したmeta_keyを
値が入っているもののみ、指定した数だけランダムに表示させたいと考えております。———————————-
■記事1
meta_key = key_AAA[0]
meta_value = value_AAAmeta_key = key_AAA[1]
meta_value = value_BBB■記事2
meta_key = key_AAA[0]
meta_value = value_CCC■記事3
meta_key = key_AAA[0]
meta_value = なし以下、増えていきます。
———————————-
このmeta_keyは値がある記事とない記事、値がある記事については
上記のように1つの場合から複数ある場合もございます。ひとまず全meta_keyについては以下のように出力させてみました。
———————————-
■ソースglobal $wpdb; $query = "SELECT meta_id,post_id,meta_key,meta_value FROM $wpdb->postmeta WHERE meta_key = 'key_AAA' ORDER BY RAND()"; $cf = $wpdb->get_results($query, ARRAY_A); $meta_key = array(); $post_id = array(); foreach( $cf as $row ){ if( $row['meta_key'] == "key_AAA" ){ array_push( $meta_key, $row['meta_value'] ); } if( $row['meta_key'] == "key_AAA" ){ array_push( $post_id, $row['post_id'] ); } } $length = count( $meta_key ); echo '<ul>'; for( $i = 0; $i < $length; $i ++ ){ if($meta_key[$i]){ echo '<li><span>' . get_the_title($post_id[$i]) . '</span><a href="' . get_permalink($post_id[$i]) . '">' . $meta_key[$i] . '</a></li>'; } } echo '</ul>';
———————————-
■結果
<ul> <li><span>記事1</span><a href="記事1のURL">value_AAA</a></li> <li><span>記事1</span><a href="記事1のURL">value_BBB</a></li> <li><span>記事2</span><a href="記事1のURL">value_CCC</a></li> (以下、key_AAAに値が入っているmeta_valueが全てリスト表示) </ul>
※リストの表示順序はランダムに出力できております。
———————————-これでkey_AAAに値のある記事を全て表示できているのですが、
この表示数を5件や10件といった具合に指定をしたいのです。試しに
$query = "SELECT meta_id,post_id,meta_key,meta_value FROM $wpdb->postmeta WHERE meta_key = 'key_AAA' ORDER BY RAND() LIMIT 5";
としてみたのですが、key_AAAに値の無い記事を省く記述がないため、出力結果
は値の無い記事も含めた記事数分を取得されてしまいます。現在はこの時点で行き詰っております。
出力場所はsidebar.phpになります。値のあるkey_AAAのみを取得する方法をご教示いただきたく存じます。
どうぞ宜しくお願い申し上げます。
-
単純に
$length = count( $meta_key ); for( $i = 0; $i < $length; $i ++ ){
を
for( $i = 0; $i < 5; $i ++ ){
とか
for( $i = 0; $i < 10; $i ++ ){
にするんではダメですかね。こんなのしか思い浮かばなくてすみません。
kurosquare様
お世話になります。
for( $i = 0; $i < 整数; $i ++ ){
にしてみましたが、表示結果は変わりませんでした。引き続きお世話になります。
どうぞ宜しくお願い申し上げます。ちなみに、
var_dump($meta_key);
を記述した結果は、array(5) { [0]=> string(82) "value_AAA" [1]=> string(0) "" [2]=> string(0) "" [3]=> string(39) "value_CCC" [4]=> string(44) "value_BBB ※以下、続きます。 ※順序がランダムに変わります。 }
となっております。
例えば、上記例で5件を表示したい場合には、[1]と[2]を除いたうちの5件が欲しいのです。
下記を試してみましたが、結果は
array(0)
でした。$query = "SELECT meta_id,post_id,meta_key,meta_value FROM $wpdb->postmeta WHERE meta_key = 'key_AAA' AND meta_value = %s ORDER BY RAND()"; $cf = $wpdb->get_results($query, ARRAY_A);
PHPは見よう見まねのため、思うように動かせずにおります。
お手数をお掛けします。
どうぞ宜しくお願い申し上げます。自己解決いたしました。
$query = "SELECT meta_id,post_id,meta_key,meta_value FROM $wpdb->postmeta WHERE meta_key = 'key_AAA' ORDER BY RAND()";
を
$query = "SELECT meta_id,post_id,meta_key,meta_value FROM $wpdb->postmeta WHERE meta_key = 'key_AAA' AND meta_value != '' ORDER BY RAND()";
としたところ、無事に表示されました。
kurosquare様、ご返答いただきましてありがとうございました。
これで閉じさせていただきます。
- トピック「値の入っているmeta_keyを任意で指定した数だけ取得したい」には新たに返信することはできません。