サポート » テーマ » 値の入っているmeta_keyを任意で指定した数だけ取得したい

  • 解決済 kuma9th

    (@kuma9th)


    はじめまして。
    貴重な場所をお借りします。
    どうぞ宜しくお願い致します。

    カスタムフィールドテンプレートでmultiple = trueに指定したmeta_keyを
    値が入っているもののみ、指定した数だけランダムに表示させたいと考えております。

    ———————————-
     ■記事1
       meta_key = key_AAA[0]
       meta_value = value_AAA

       meta_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のみを取得する方法をご教示いただきたく存じます。
    どうぞ宜しくお願い申し上げます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 単純に

    $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様、ご返答いただきましてありがとうございました。
    これで閉じさせていただきます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「値の入っているmeta_keyを任意で指定した数だけ取得したい」には新たに返信することはできません。