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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3688閲覧

カスタムフィールド (ACF)を利用してアーカイブページ で絞り込みをしたい

kii.32

総合スコア67

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/03/20 08:27

前提・実現したいこと

カスタム投稿アーカイブページにて、
カスタムフィールドの値によって絞り込みをしたいです。

==========================
カスタム投稿投稿タイプ:news

●カスタムフィールド 項目(select/必須選択)

フィールド名:area
select項目:東京、大阪、神戸


フィールド名:age
select項目:20代、30代、40代


フィールド名:color
select項目:あお、あか、きいろ、しろ

==========================

このようなカスタム投稿があり、
カスタムフィールド によって3項目を投稿ごとにセレクトするようにしています。

archive-news.phpのアーカイブページでは記事一覧(全ての記事)を表示して、
東京を選択しているだけの記事一覧、大阪を選択しているだけの記事一覧、、、
20代を選択しているだけの記事一覧、、、、
あおを選択しているだけの記事一覧、、、、

といった風に絞り込んでそれぞれごとの記事一覧を表示したいです。

該当のソースコード

archive

1<div class="post_items"> 2 <?php 3 $customPostArg = array( 4 'posts_per_page' => -1, 5 'post_type' => 'news', // カスタム投稿タイプ名 6 'orderby' => 'date', 7 'order' => 'DESC' 8 ); 9 $customPosts = get_posts($customPostArg); 10 ?> 11 12 <?php if ($customPosts) : foreach ($customPosts as $post) : setup_postdata($post); ?> 13 <div class="post_item"> 14 <a href="<?php the_permalink(); ?>"> 15 <dl class="note"> 16              <dt>エリア</dt> 17 <dd> 18 <?php the_field('area'); ?> 19 </dd> 20 <dt>年齢</dt> 21 <dd> 22 <?php the_field('age'); ?> 23 </dd> 24 <dt>色</dt> 25 <dd> 26 <?php the_field('color'); ?> 27 </dd> 28 </dl> 29 </a> 30 </div> 31 <?php endforeach; 32 endif; ?> 33 34</div> 35

試したこと

WordPressのサイト上で簡単に並び替え&絞り込みする方法

上記サイトを参考にfunctions.phpに下記を挿入し

functions.php

1 2function add_meta_query_vars($public_query_vars) 3{ 4 $public_query_vars[] = 'meta_key'; 5 $public_query_vars[] = 'meta_value'; 6 return $public_query_vars; 7} 8add_filter('query_vars', 'add_meta_query_vars'); 9

https://example/news/?meta_key=area&meta_value=大阪
https://example/news/?meta_key=age&meta_value=30代

という風にアクセスをしても、全ての一覧が表示されてしまい、
上手く絞り込みができず困っております。。。

有識者の方いらっしゃいましたら、お力添えをいただけると助かります。
どうぞ宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

archive-news.phpの一番上でそれぞれのパラメータを取得してみてください。

$key_params = $_GET['meta_key']; $val_params = $_GET['meta_value'];

で、パラメータの有無によって、条件分岐で$customPostArgの中身を書き換えます。

if(isset($key_params) && $key_params) { $customPostArg = array( 'posts_per_page' => -1, 'post_type' => 'news', 'meta_query' => array( array( 'key' => $key_params, 'value' => $val_params, ) ) 'orderby' => 'date', 'order' => 'DESC' ); } else { $customPostArg = array( 'posts_per_page' => -1, 'post_type' => 'news', 'orderby' => 'date', 'order' => 'DESC' ); }

最後に$customPostArgに基づいた記事を取得。

$customPosts = get_posts($customPostArg);

こんな感じでいかがでしょうか?
動作確認していないので、間違っていたらすみません。。。

投稿2020/03/20 08:50

suminoel

総合スコア80

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

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

kii.32

2020/03/20 09:16

お教えいただいたコードで無事解決しました!ありがとうございます! 今後の勉強のためにお伺いしたいのですが、 selectではなくチェックボックス(複数選択可能)が ========================== ④ フィールド名:food チェックボックス項目:ハンバーグ、唐揚げ、牛丼、カツ丼 ========================== 含める場合ですと、 https://example/news/?meta_key=food&meta_value=牛丼 で機能しないようなのですが、また別のパラメーターを取得する必要があるのでしょうか? 度々、申し訳ございません。
suminoel

2020/03/20 09:25

複数選択可能なチェックボックスということは、返り値が配列になっているということですよね。 HTMLがないのでわかりませんが、チェックボックスのname属性がfood[]のようになっていたら、配列で返ってきます。 https://qiita.com/4cres/items/26154314959dcccbfd34 例えば、牛丼、カツ丼にチェックを入れたのに例のURLのようになっているとしたら、そもそも複数選択が可能になっていないということでしょうね。 牛丼、もしくはカツ丼のmeta_valueが設定されている記事を取得する場合は、relationを設定する必要があります。 それに関しては下記の記事が参考になると思います。 http://mymynote.com/2018/04/wordpress%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E6%9D%A1%E4%BB%B6%E3%81%AB%E3%81%97%E3%81%A6and%E3%83%BBor/
kii.32

2020/03/20 22:30

relationの設定が必要なのですね!初めて知りました! ご丁寧にご回答いただいましてありがとうございました。 感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問