サポート » 使い方全般 » カスタムフィールドの値を「あかさたな」で分ける

  • koolmint

    (@koolmint)


    カスタムフィールドの値(name・kana)を紐づけて、あ行-ん行に振り分けているのですが
    カウント数の表示が上手くいかず困っています。

    
       $rows = $wpdb->get_results( $wpdb->prepare( "
                SELECT m.meta_value AS name, m2.meta_value AS kana, COUNT(m.meta_value) AS cnt FROM wp_postmeta m
                LEFT JOIN wp_postmeta m2 ON m2.post_id = m.post_id
                WHERE 1=1
                AND m.post_id IN (" . join(',', $posts) . ")
                AND m.meta_key = 'name' AND m2.meta_key = 'kana'
                AND m.meta_value != '' AND m2.meta_value != ''
                GROUP BY m.meta_value
                ORDER BY CAST(m2.meta_value AS CHAR)
            ","" ));
        } else {
       $rows = $wpdb->get_results( $wpdb->prepare( "
                SELECT m.meta_value AS name, m2.meta_value AS kana, COUNT(m.meta_value) AS cnt FROM wp_postmeta m
                LEFT JOIN wp_postmeta m2 ON m2.post_id = m.post_id
                WHERE 1=1
                AND m.meta_key = 'name' AND m2.meta_key = 'kana'
                AND m.meta_value != '' AND m2.meta_value != ''
                GROUP BY m.meta_value
                ORDER BY CAST(m2.meta_value AS CHAR)
            ","" ));
        }
        return $rows;
    

    カスタムフィールドに神戸(こうべ)が5個、登録されているなら下記の様になって欲しいのですが
    <a href=hogehoge/meta?key=神戸>神戸 <span>5</span> </a>

    ※ 正常のカウントの数が5なら倍の10となってしまう。
    なかなか上手くいかなかったのでカウント数の表示関連のコードを削除して放置してたら
    カウント数を表示させるコードを忘れてしまってどうすることもできない状態です。

    
     <?php
     $array = get_name_search_options();
     $kana = array("あ行" => "[あ-お]");
     $result = array();
     foreach ( $array as $key=>$line) {
     $match = FALSE;
     foreach( $kana as $key => $pattern){
     if (preg_match("/^" . $pattern . "/u", $line->kana )) {
     $result[$key][] = $line->name ."";
     $match = TRUE;
     break; } }
     } ?>
    
    <?php foreach($result as $name => $namearray) {
     foreach($namearray as  $namecnt) {
      $name = preg_replace('/\(\d*\)/','',$namecnt );
      echo "<a href=\"".$url."/meta?key=name&value=".$name."\">".$namecnt."</a>\n"; }
     } 
     if( empty( $result ) ) {
     echo '未登録';
     } ?>

    どのように修正を行えばいいのでしょうか?
    どうか宜しくお願い致します。

    • このトピックはkoolmintが2年前に変更しました。
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • 回答ではないです。

    カスタムフィールドの値を分けても仕方がないのでは。
    カスタムフィールドの値をもとに投稿記事を分けるのでは。

    個人的にカスタムフィールドとカスタム分類の違いに悩んでいますが、
    今回はカスタムフィールドが正解なんでしょうか。

    こんにちは

    提示されているコードではget_name_search_options()の結果にどのよな構造のデータが期待されているのかが良く分からないので何とも言えない感じです。
    SQL の結果そのままだと考えると、途中で数値が消えてしまいます。
    2回目のループでのpreg_replaceを見ると name に神戸(5)とか入っているのかもしれませんが、そうすると$namecntの値は神戸(5)になってしまいますし・・・

    get_name_search_options()の取得結果が意図通りなのか、初回ループの結果が意図通りなのかをvar_dumpなどで確認されてはどうでしょうか。

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