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

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

ただいまの
回答率

89.12%

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

解決済

回答 1

投稿

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

n_yoko

score 32

やりたいこと

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

具体例①

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

具体例②

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

やったこと

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

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

概要

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

運用方法

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

サイトの画面構成

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

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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

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

function add_query_vars_filter( $vars ){
  $vars[] = "my_var";
  return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );

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

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

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

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/11/18 10:31

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

    キャンセル

  • 2018/11/19 16:19

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

    キャンセル

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

  • ただいまの回答率 89.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる