質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.36%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

1回答

595閲覧

Meta queryでカテゴリー名とmeta valueを比較したい

cwhiro

総合スコア21

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

0クリップ

投稿2021/04/20 11:06

編集2021/04/21 07:54

質問1番
メタキーの値がカテゴリー名と異なる記事だけを表示したいのですが、うまくいきません。メタの値は一つで、記事はそれぞれ複数のカテゴリーに属しています。

下記では初めにカテゴリー名を抽出して、meta query内でメタの値と比較しようとしていますが、記事一つ分のカテゴリー名しか抽出していないようです。

<?php $cats = get_the_category(); foreach($cats as $cat){ $category_name = $cat->cat_name; } ?> <?php $args = array( 'posts_per_page' => -1, 'post_type' => 'post', 'post_status' => 'publish', 'meta_query' => array( 'key'=> '1bb1', 'value' => $category_name, 'compare'=>'NOT LIKE', ), );?>

質問2番
ご助言いただき、下記のコードで本来の目的だった記事数のカウントがほとんどの場合でできるようになりました

<?php $cats = get_the_category(); $category_name=array(); foreach($cats as $cat){ $category_name[] = $cat->cat_name; } ?> <?php $args = array( 'posts_per_page' => -1, 'post_type' => 'post', 'post_status' => 'publish', 'meta_query' => array( 'key'=> '1bb1', 'value' => $category_name, 'compare'=>'NOT IN', ), ); $query_into = new WP_Query($args); $number_of_into = $query_into->found_posts; ?>

カウントがうまくいかない(meta queryできていない)ときがあります。

たとえば下記のような5記事では、カウント数は5記事となってほしいのですが、1記事という結果になります

記事1 所属カテゴリー「こぶた、動物」 メタキー1bb1の値「たぬき」
記事2 所属カテゴリー「たぬき、動物」 メタキー1bb1の値「こぶた」
記事3 所属カテゴリー「きつね、動物」 メタキー1bb1の値「こぶた」
記事4 所属カテゴリー「にゃん、動物」 メタキー1bb1の値「こぶた」
記事5 所属カテゴリー「わんこ、動物」 メタキー1bb1の値「こぶた」

下記の場合はカウント数は4記事となってほしいのですが、ゼロという結果になります

記事1 所属カテゴリー「こぶた、動物」 メタキー1bb1の値「こぶた」
記事2 所属カテゴリー「たぬき、動物」 メタキー1bb1の値「こぶた」
記事3 所属カテゴリー「きつね、動物」 メタキー1bb1の値「こぶた」
記事4 所属カテゴリー「にゃん、動物」 メタキー1bb1の値「こぶた」
記事5 所属カテゴリー「わんこ、動物」 メタキー1bb1の値「こぶた」

下記の場合は、正しくカウントされ、記事数は5となります

記事1 所属カテゴリー「こぶた、動物」 メタキー1bb1の値「たぬき」
記事2 所属カテゴリー「たぬき、動物」 メタキー1bb1の値「きつね」
記事3 所属カテゴリー「きつね、動物」 メタキー1bb1の値「たぬき」
記事4 所属カテゴリー「にゃん、動物」 メタキー1bb1の値「わんこ」
記事5 所属カテゴリー「わんこ、動物」 メタキー1bb1の値「たぬき」

上記を少しかえて、「きつね」を「こぶた」に変えると、カウント数は5のままであってほしいのですが、4となります

記事1 所属カテゴリー「こぶた、動物」 メタキー1bb1の値「たぬき」
記事2 所属カテゴリー「たぬき、動物」 メタキー1bb1の値「こぶた」
記事3 所属カテゴリー「きつね、動物」 メタキー1bb1の値「たぬき」
記事4 所属カテゴリー「にゃん、動物」 メタキー1bb1の値「わんこ」
記事5 所属カテゴリー「わんこ、動物」 メタキー1bb1の値「たぬき」

上記のような検証を繰り返した結果、メタキー1bb1の値が「こぶた」のときだけ、所属カテゴリー名とメタキー1bb1の値が異なっていても、カウントされない(meta queryできていない)ことがわかりました

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

今のコードは、1記事に1カテゴリー、ならばうまくいくのではないでしょうか。

$category_nameにカテゴリーを代入してますが、複数カテゴリーある場合、変数が上書きされてしまうからです。

2箇所修正してみてください。

(1)$category_nameを配列にする

php

1#foreach($cats as $cat){ 2#$category_name = $cat->cat_name; 3#} 4 5$category_name=array(); 6foreach($cats as $cat){ 7$category_name[] = $cat->cat_name; 8}

(2)meta_queryの比較方法

php

1#'compare'=>'NOT LIKE', 2'compare'=>'NOT IN',

投稿2021/04/20 23:58

hiok

総合スコア595

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cwhiro

2021/04/21 07:57 編集

ご回答をありがとうございます。ほとんど期待していたことができたのですが、下記のようなときがありまして、もしご助言をいただければ幸いです。 上記のmeta queryにもとづいて、記事数をカウントしているのですが、たとえば5つの記事で5つのカテゴリーと5つのカスタムフィールドの値を設定すると、一つの値のときだけ記事数がカウントされないときがあります
hiok

2021/04/21 06:29

すいません、以下の部分、理解できません。。 もう少し具体的にお願いします。 「上記のmeta queryにもとづいて、記事数をカウントしているのですが、たとえば5つの記事で5つのカテゴリーと5つのカスタムフィールドの値を設定すると、一つの値のときだけ記事数がカウントされないときがあります。ただ、そのカウントされない値の記事だけで行うとカウントできます」
cwhiro

2021/04/21 08:03

うまいご説明ができなくてすいません。質問の2番に具体例をあげさせていただきました。本来はmeta queryで該当するはずの記事が、特定の値だとmeta queryできないという内容です
hiok

2021/04/21 11:52

提示されているプログラムは、どこで実行されてますか?(どのファイルに記載していますか?)
cwhiro

2021/04/21 15:40

このmeta queryは、検索結果のテンプレートページで実行しています
hiok

2021/04/22 04:39

検索結果テンプレートで上記コードを実行した場合、おそらく、希望する結果にはならないように思います。 「get_the_category()」で取得できるカテゴリーは、表示したページ(今回は検索結果ページ)のカテゴリー情報なのですが、検索結果ページの場合(おそらく)検索結果の一番最初に表示された投稿ページのカテゴリー情報を返します。 「うまく動かない」状況から推測するに、検索結果ページの最初の投稿が「こぶたカテゴリー」の記事になっているのではないでしょうか。 実現したいことを整理した上で、設計からやり直すことをおすすめいたします。
cwhiro

2021/04/22 07:01

ご指摘をありがとうございました。固定ページにて作り直してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問