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

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

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

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

PHP

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

Q&A

解決済

1回答

2085閲覧

wordpressの検索範囲について

choko6

総合スコア13

WordPress

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

PHP

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

1グッド

1クリップ

投稿2017/10/16 01:55

編集2017/10/24 04:33

wordpressの検索範囲についてお聞きしたことがあります。

プラグインのSimple Membershipを使用して会員サイトを作成しています。
ページ構成は下記です。
・会員だけが閲覧できるページ
・全員が閲覧できるページ

headerに検索ボックスを設置し、サイト内検索が出来るようにしようと考えています。

サイト内検索は下記の動きができるようにしたいと考えています。
①サイトにログインしていない人がサイト内検索をしたときに会員だけが閲覧できるページが検索結果に出てこないようにしたい。
②サイトにログインしている人はサイト内検索をしたときに会員だけが閲覧できるページ・全員が閲覧できるページが検索結果に出るようにしたい。

特定の固定ページを検索結果から除外する・特定のカテゴリのみを検索対象にすることは
出来たのですが、①②の動きをどのように設定したらいいのか悩んでいます…。

下記作成をしたコードです。
functions.phpに検索対象の絞り込みの設定をしました。
固定ページ、投稿、カタスタム投稿タイプ(information)を検索対象に設定しています。

function SearchFilter($query) { if ( !is_admin() && $query->is_main_query() && $query->is_search() ) { $query->set('post_type', array('post', 'information', 'page')); } } add_action( 'pre_get_posts','SearchFilter' );

wordpressでは①②の動きの設定をすることは可能でしょうか?

※wp_swpm_membership_tblの中身です。
イメージ説明

ご教示お願い致します。

etetetetetetete👍を押しています

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

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

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

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

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

CHERRY

2017/10/16 02:19

どのようにして、会員限定外記事を検索しようとしているか不明ですので、検索部分に関係するコード等の提示は可能でしょうか? 質問を編集して追記していただけないでしょうか。
choko6

2017/10/16 04:13

申し訳ございません。作成したコードを追加しました。ご確認をお願い致します。
CHERRY

2017/10/16 04:20 編集

各記事の会員限定の区別は、どのようにされているのでしょうか?
choko6

2017/10/16 05:29

会員だけが閲覧できるページの設定はプラグインのSimple Membershipを使用して設定をしています。プラグインを使用しているので各記事の会員限定の区分の作成はしていません。
退会済みユーザー

退会済みユーザー

2017/10/17 06:34

これは会員のみに限定したページがログインしている、していないに限らずサイト内検索の結果に含まれなければ良いという意味ですか?
choko6

2017/10/17 06:51

会員のみに限定したページにログインしている場合はサイト内検索の結果に会員だけが閲覧できるページ・全員が閲覧できるページが出てくるようにしたいと考えています。ログインについての記載を忘れていました。すみません…。
退会済みユーザー

退会済みユーザー

2017/10/17 07:18

分かりやすく質問文を修正してください。
choko6

2017/10/17 07:35

申し訳ございません。質問文を修正しました。ご確認をお願い致します。
guest

回答1

0

ベストアンサー

可能か不可能かで言えば可能です。

多分、自動で出来る事を望んでるんだと思いますが、それならそう書きましょう。

そのプラグインで投稿を限定公開にした場合、投稿毎に何かしらの値が割り振られるのではなくシリアライズされたデータに投稿IDが追加されます。
それを取り出して未ログイン時に検索結果に含めないということを無理矢理すれば自動で割り振り可能ですが、もしプラグインの仕様が変更された場合この方法は意味を成さないことを覚えておいてください。

対象は固定ページだったのですか。
失礼しました。それならpost_listをpage_listに変えたら良いだけでした。
制限をかけたページが限定されててそれ以上増えないならIDを指定するだけの単純なやり方で良いと思いますが、増えないとも限らないという前提でもうかなりのやっつけですが、投稿・固定ページ・カスタム投稿で閲覧制限を設けた場合に検索対象に出来るはずです。

function search_result_exclusion_protect_content( $query ) { if ( is_search() ); global $wpdb; $post_list = $wpdb->get_results( 'SELECT post_list FROM `wp_swpm_membership_tbl` WHERE id =1' ); $page_list = $wpdb->get_results( 'SELECT page_list FROM `wp_swpm_membership_tbl` WHERE id =1' ); $custom_post_list = $wpdb->get_results( 'SELECT custom_post_list FROM `wp_swpm_membership_tbl` WHERE id =1' ); if ( $post_list[0]->post_list !== 'a:0:{}' && $post_list[0]->post_list !== 'N;' ) { $value = $post_list[0]->post_list; $value = preg_replace('/a:[0-9]:{i:[0-9];i:/', '', $value ); $value = preg_replace( '/;i:[0-9];i:/', ',', $value ); $value1 = str_replace( ';}', '', $value ); } else { $value1 = ''; } if ( $page_list[0]->page_list !== 'a:0:{}' && $page_list[0]->page_list !== 'N;' ) { $value = $page_list[0]->page_list; $value = preg_replace('/a:[0-9]:{i:[0-9];i:/', '', $value ); $value = preg_replace( '/;i:[0-9];i:/', ',', $value ); $value2 = str_replace( ';}', '', $value ); } else { $value2 = ''; } if ( $custom_post_list[0]->custom_post_list !== 'a:0:{}' && $custom_post_list[0]->custom_post_list !== 'N;' ) { $value = $custom_post_list[0]->custom_post_list; $value = preg_replace('/a:[0-9]:{i:[0-9];i:/', '', $value ); $value = preg_replace( '/;i:[0-9];i:/', ',', $value ); $value3 = str_replace( ';}', '', $value ); } else { $value3 = ''; } $value4 = $value1.','.$value2.','.$value3; $ids = explode( ',', $value4 ); if ( $query->is_search && !is_user_logged_in() ) $query->set( 'post__not_in', $ids ); return $query; } add_filter( 'pre_get_posts', 'search_result_exclusion_protect_content' );

投稿2017/10/17 08:05

編集2017/10/24 10:00
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

choko6

2017/10/18 08:25

ご回答有難うございました。functions.phpに教えて頂いたコードを追加し、検索の確認をしようと思います。
退会済みユーザー

退会済みユーザー

2017/10/18 08:49

可不可を確認してからコメントしてください。
choko6

2017/10/19 04:47 編集

申し訳ございませんでした。確認をしました。修正後のコードをfunctions.phpに追加後、サイトにログインしていない状態でがサイト内検索をしたとき、会員だけが閲覧できるページが検索結果に出てきました。修正前のコード(会員だけが閲覧できるページのIDを書く方法)をfunctions.phpに追加後、サイトにログインしていない状態でがサイト内検索をしたときに会員だけが閲覧できるページが検索結果に出てきませんでした。
退会済みユーザー

退会済みユーザー

2017/10/19 05:02

ということはID等データベースの情報が合っていない可能性があります。 phpMyAdminなどでwp_swpm_membership_tblの中身を見れますか? その中のIDが1でなければWHERE id =の値を変えなければいけません。 もし、閲覧制限を設けた記事が追加される度に手作業でIDを追加するのが億劫でなければ最初の方法を使ってください。
choko6

2017/10/23 04:36

phpMyAdminでwp_swpm_membership_tblの中身を確認しました。IDは「1」「2」がありました。 aliasの「1」はContent Protection、「2」は会員です。 WHERE id =の値を「2」に変更をしましたが変更前と同じ状態です。
退会済みユーザー

退会済みユーザー

2017/10/23 04:57

Content Protectionのpost_listの内容を張り付けてください
choko6

2017/10/23 23:54

Content Protectionのpost_listの内容は「a:0:{}」です。 宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2017/10/24 03:04

中身が無いということは現時点で限定公開の記事が無いということになると思いますが違いますか? もしそうでなければ状態が把握できないのでwp_swpm_membership_tblを開いた画面のスクリーンショットを質問欄に貼ってもらえますか?
choko6

2017/10/24 04:34

画面のスクリーンショットを貼りました。 固定ページを2ページ、限定公開にしています。 宜しくお願い致します。
choko6

2017/10/25 04:16

対象のページについて記載忘れ、申し訳ございませんでした。 サイトにログインしていない状態でサイト内検索をしたとき、会員だけが閲覧できるページが検索結果に出てきませんでした。 ay03様、有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問