前提・実現したいこと
名前にかなを関連付けして一覧表示させ同じ値をカウントしたいのですが、表示はできているのにカウント数が正常に行われず
数が合わず困っています。
該当のソースコード functions.php
function get_name_search_options() { global $wpdb; if (is_search()) { global $search_terms, $custom_filters; // カテゴリ絞り込み if($search_terms['catnum']){ $taxquerysp[] = array( 'taxonomy' => 'category', 'terms' => $search_terms['catnum'], 'include_children' => false, 'field' => 'term_id', 'operator' => 'AND' ); } // カスタムフィールド絞り込み if($search_terms['catnum'] && $search_terms['custom_field']){ $metaquerysp[] = array( 'key' => $custom_filters[$search_terms['catnum']], 'value' => $search_terms['custom_field'], 'compare' => '=', ); } $taxquerysp['relation'] = 'AND'; $metaquerysp['relation'] = 'AND'; // 現在の検索クエリーに該当する投稿のIDを取得 $posts = get_posts(array( 'fields' => 'ids', 'tax_query' => $taxquerysp, 'meta_query' => $metaquerysp, 's' => $search_terms['s'], 'posts_per_page' => -1 )); $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; }
試したこと
2つのカスタムフィールド[name][kana]に対し下記の内容を登録してダンプで確認すると関連付けはできているのですが
登録した数が合いません。
鈴木:すずき
野茂:のも
山本:やまもと
遠山:とうやま
該当のソースコード index.php
<?php $args = get_name_search_options(); var_dump($args); ?>
本来ならcnt数は4になるはずなのに3.5とか5になってしまいます。
補足情報(FW/ツールのバージョンなど)
Wordpress 4.9
ACF4.4.12
php5.6
あなたの回答
tips
プレビュー