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

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

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

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

Q&A

解決済

1回答

565閲覧

サイドバー・ウィジェット機能(検索/カテゴリー)の適用範囲を、特定の固定ページに限定したい。

n_yoko

総合スコア32

WordPress

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

0グッド

0クリップ

投稿2018/11/15 01:45

#やりたいこと
サイドバー・ウィジェット機能(検索/カテゴリ/)の適用範囲を、個別の固定ページに限定できるようなプラグイン、またはコード記述方法を調べています。

#具体例①
「固定ページA」「固定ページB」があり、それぞれのサイドバーに「検索」「カテゴリ」「Views(WP-PostViewsプラグイン」ウィジェットを表示させています。ウィジェット機能は通常、すべての固定ページに対して適用されてしまいますが、これを特定の固定ページにのみ適用するように調整したいです。

#具体例②
固定ページAの「検索」ウィジェットを使うと、検索対象に、固定ページBの記事も含まれてしまいます。固定ページAで「検索」したときはAの中身のみ。固定ページBで「検索」したときはBの範囲のみ。他のウィジェットについても同様の動きをさせたい。

#やったこと
①【解決】個別の固定ページごとにサイドバー(ウィジェット)の表示を変える。
→元々、固定ページは共通のサイドバーしか指定できませんでしたが、
[content-aware-sidebars]プラグインを導入し、上記仕様を実装できました。

②【調査中】ウィジェット機能の適用範囲を、個別の固定ページに限定する。
→「サイドバーに特定のカテゴリを表示させない(functions.phpにコード追記)」といった固定ページ全体に影響の出るやり方はネットに情報がありますが、複数の固定ページに同じウィジェットを設定して(今回であれば「検索」「カテゴリー」「Views」)、固定ページごとに異なる表示をする、やり方は現時点で見つかっていません。

#概要
Wordpress(bizvektor)で社内専用サイトを作っています。利用用途は業務ツールの共有(アップロード&ダウンロード)です。ツールの共有を行うページ(仮に"ツール共有画面"とします)は、「本社(固定ページA)」「支店(固定ページB)」で分けます。トップページに「本社)」「支店」のリンクを用意、ユーザーの所属部署に応じて選択させます。

#運用方法
ツールの閲覧・ダウンロードは誰でもOK、アップロードにはログイン認証が必要。ユーザー権限は「管理者」「投稿者」の2種類。「管理者」は情報シスがWPの管理画面を使うために必要なもので、一般ユーザー(情シス以外のメンバー)には「投稿者」のみ付与します。

#サイトの画面構成
・トップページ:
-ツール共有画面「本社」「支店」のリンクのみ。

・ツール共有画面(本社)/(支店):
-投稿一覧(過去に投稿したツール)
-サイドバー・ウィジェット(検索/カテゴリ/ビュー)
-新規投稿(※ログインユーザーのみ)
※画面上部のツールバーに「新規」メニューが出る。

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

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

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

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

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

guest

回答1

0

ベストアンサー

1.WordPressが処理するクエリに独自パラメータ追加

PHP

1function add_query_vars_filter( $vars ){ 2 $vars[] = "my_var"; 3 return $vars; 4} 5add_filter( 'query_vars', 'add_query_vars_filter' );

2.検索フォームに隠しパラメータとして投稿IDを追加

PHP

1global $wp_query; 2echo '<input name="my_var" value="' . $wp_query->posts[0]->ID . '" />'

3.隠しパラメータの投稿IDをもとに、メインクエリを制御

PHP

1function search_filter( $query ) { 2 if ( !is_admin() && $query->is_main_query() ) { 3 if ( $query->is_search ) { 4 if($query->query_vars['my_var'] === '61') { 5 // 例:検索範囲を投稿IDの1と2の投稿にする 6 $query->set( 'post__in', array(1, 2) ); 7 } 8 } 9 } 10} 11add_action( 'pre_get_posts','search_filter' );

こうすることで、どこの固定ページに表示された検索フォームから遷移してきたのかを確認して、検索処理を制御できます。

投稿2018/11/18 01:24

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

n_yoko

2018/11/18 01:31

回答頂きありがとうございます。明日職場で試してみて、結果をコメントでお知らせします。取り急ぎお礼までに。
n_yoko

2018/11/19 07:19

今日教えて頂いたコードを子テーマのfunctions.phpに追記しました(functions.phpで合っていますか?)。"検索範囲を投稿IDの1と2の投稿にする"はずが、他の投稿IDの記事が検索結果に表示されてしまいましたが、クエリを制御するという考え方を知りましたので、あとは書籍等で自主勉強してみます。WordPressの動く仕組みから。動作確認は取れていませんが、自力理解はまだ時間がかかりそうなので、今回の質問は一旦クローズとさせていただきます。情報ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問