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

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

ただいまの
回答率

89.65%

タームのアーカイブページでカスタムフィールドのチェックボックスの値での条件表示ができない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 514

tarachan

score 4

 前提・実現したいこと

タームのアーカイブページにて思ったように表示ができないのでお力を借りたくご質問をさせていただきます。
2日悩んでおります。

現在、

カスタム投稿:hospital
タクソノミー:area
ターム:knagawa,yokohama,chigasaki・・・

など全国の病院を都道府県や都市ごとに登録しています。県が親タームで子タームで都市がある形です。

病院情報では
カスタムフォールドでは、病院名の他にチェックボックスで 口コミが多い、普通、口コミが少ない、情報なしを選択できるようになっています。

smart custum filldsを使い

タイプ:テキスト
ラベル:病院名
名前:cf-hospitalmei

タイプ:チェックボックス
ラベル:口コミ
名前:cf-kuchikomi
選択肢:
ooi => 口コミが多い
hutu => 普通
sukunai => 口コミが少ない
nashi => 情報なし

このように設定しています。

実現したいのは
https://example.com/hospital/area/kanagawa/yokohama/

としたときのアーカイブページでそこのタームに所属している

全部の病院をまずは表示し、次に、口コミが多い病院、普通の病院、口コミが少ない病院、情報なしの順に表示しようとしています。

メインループで

<ul>
<?php if (have_posts()):while(have_posts()):the_post(); ?>
<li><?php $cf_hospitalmei = SCF::get('cf-hospitalmei');echo $cf_hospitalmei;?></li>
<?php endwhile; ?>
<?php else: ?>
<!-- 投稿が無い場合の処理 -->
<?php endif; ?>
</ul>

これで現在のタームに所属されている(例なら横浜)の病院がすべて表示されています。

 発生している問題・エラーメッセージ

そのあとに、サブループで【現在のタームに所属されていて、かつ口コミが多い病院だけを表示】することができません。
横浜だけでなく口コミが多いにチェックされているものをすべて取ってきてしまいます。

 該当のソースコード

<?php 
    $term      = wp_get_object_terms($post->ID,'area'); //指定されたタクソノミーのタームを取得
    $term_name = $term[0]->name; //ターム名
    $term_slug = $term[0]->slug; //タームのスラッグ
 ?>

<h2>口コミの多い病院はこちらです</h2>

<ul>
<?php 
$args = array(
        'post_type' => 'hospital', 
        'taxonomy' => 'area',
        'field' => 'id',
        'terms' => $term_name,
        'meta_key' => 'cf-kuchikomi',
        'meta_value' => 'ooi',
        'meta_compare' => 'LIKE'
          );

$my_query = new WP_Query($args);
if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post();
?>

<li><?php $cf_hospitalmei = SCF::get('cf-hospitalmei');echo $cf_hospitalmei;?></li>

<?php endwhile; endif; wp_reset_postdata(); ?>
</ul>


<h2>口コミの普通の病院はこちらです</h2>

<ul>
<?php 
$args = array(
        'post_type' => 'hospital', 
        'taxonomy' => 'area',
        'field' => 'id',
        'terms' => $term_name,
        'meta_key' => 'cf-kuchikomi',
        'meta_value' => 'hutu',
        'meta_compare' => 'LIKE'
          );

$my_query = new WP_Query($args);
if ($my_query->have_posts()) : while ($my_query->have_posts()) : $my_query->the_post();
?>

<li><?php $cf_hospitalmei = SCF::get('cf-hospitalmei');echo $cf_hospitalmei;?></li>

<?php endwhile; endif; wp_reset_postdata(); ?>
</ul>

途方にくれております、当方phpに先月からチャレンジしておりますが今後も勉強をしていきたいと思っております。
どうかお力添えをお願いできないでしょうか。よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

<?php
$args = array(
'post_type' => 'hospital', //カスタム投稿名
'taxonomy' => 'area', //タクソノミーを指定
'term' => $term, //表示したいタームのスラッグ
'posts_per_page' => -1 //表示件数
); 
$the_query = new WP_Query($args);
?>

termにsがついていたのが原因でした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

WP_Queryのタクソノミーのパラメータ指定の仕方が間違っているようにみえます。
本来は以下のように書くはずです。

$args = array(
    'post_type' => 'hospital',
    'tax_query' => array(
        array(
            'taxonomy' => 'area',
            'field'    => 'slug',
            'terms'    => 'kanagawa',
        ),
    ),
);
$query = new WP_Query( $args );

詳細は以下を確認してみてください。

関数リファレンス/WP Query - WordPress Codex 日本語版 | タクソノミーのパラメータ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/06 00:37

    ご返信、お礼が遅くなり申し訳ございません。おっしゃる通りで昨晩そのように試してみたのですがやはり表示は変わりませんでした。もう少し頑張ってみます。ご回答心より感謝申し上げます。

    キャンセル

  • 2018/10/06 20:57

    試しているコードを更新したのであれば、質問文に追記編集してもらえますか。

    キャンセル

  • 2018/10/08 18:32

    ご指摘ありがとうございました。更新いたしました。

    キャンセル

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

  • ただいまの回答率 89.65%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる
  • トップ
  • PHPに関する質問
  • タームのアーカイブページでカスタムフィールドのチェックボックスの値での条件表示ができない