teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

2017/10/24 10:00

投稿

退会済みユーザー
answer CHANGED
@@ -5,21 +5,45 @@
5
5
  そのプラグインで投稿を限定公開にした場合、投稿毎に何かしらの値が割り振られるのではなくシリアライズされたデータに投稿IDが追加されます。
6
6
  それを取り出して未ログイン時に検索結果に含めないということを無理矢理すれば自動で割り振り可能ですが、もしプラグインの仕様が変更された場合この方法は意味を成さないことを覚えておいてください。
7
7
 
8
+ 対象は固定ページだったのですか。
8
- 以下functions.php追加すれば出来るはず
9
+ 失礼しました。それならpost_listpage_list変えたら良いだけした
9
-
10
+ 制限をかけたページが限定されててそれ以上増えないならIDを指定するだけの単純なやり方で良いと思いますが、増えないとも限らないという前提でもうかなりのやっつけですが、投稿・固定ページ・カスタム投稿で閲覧制限を設けた場合に検索対象に出来るはずです。
10
11
  ```
11
12
  function search_result_exclusion_protect_content( $query ) {
13
+ if ( is_search() );
12
14
  global $wpdb;
13
- $list = $wpdb->get_results( 'SELECT post_list FROM `wp_swpm_membership_tbl` WHERE id =1' );
15
+ $post_list = $wpdb->get_results( 'SELECT post_list FROM `wp_swpm_membership_tbl` WHERE id =1' );
16
+ $page_list = $wpdb->get_results( 'SELECT page_list FROM `wp_swpm_membership_tbl` WHERE id =1' );
17
+ $custom_post_list = $wpdb->get_results( 'SELECT custom_post_list FROM `wp_swpm_membership_tbl` WHERE id =1' );
18
+ if ( $post_list[0]->post_list !== 'a:0:{}' && $post_list[0]->post_list !== 'N;' ) {
14
- $value = $list[0]->post_list;
19
+ $value = $post_list[0]->post_list;
20
+ $value = preg_replace('/a:[0-9]:{i:[0-9];i:/', '', $value );
15
- $value = str_replace( 'i:0;i:', '', $value );
21
+ $value = preg_replace( '/;i:[0-9];i:/', ',', $value );
16
- $value = str_replace( ';}', '', $value );
22
+ $value1 = str_replace( ';}', '', $value );
23
+ } else {
24
+ $value1 = '';
25
+ }
26
+ if ( $page_list[0]->page_list !== 'a:0:{}' && $page_list[0]->page_list !== 'N;' ) {
27
+ $value = $page_list[0]->page_list;
17
- $value = preg_replace( '/a:.+?:{/', '', $value );
28
+ $value = preg_replace('/a:[0-9]:{i:[0-9];i:/', '', $value );
18
- $value = preg_replace( '/;i:.+?;i:/', ',', $value );
29
+ $value = preg_replace( '/;i:[0-9];i:/', ',', $value );
30
+ $value2 = str_replace( ';}', '', $value );
31
+ } else {
32
+ $value2 = '';
33
+ }
34
+ if ( $custom_post_list[0]->custom_post_list !== 'a:0:{}' && $custom_post_list[0]->custom_post_list !== 'N;' ) {
35
+ $value = $custom_post_list[0]->custom_post_list;
36
+ $value = preg_replace('/a:[0-9]:{i:[0-9];i:/', '', $value );
37
+ $value = preg_replace( '/;i:[0-9];i:/', ',', $value );
38
+ $value3 = str_replace( ';}', '', $value );
39
+ } else {
40
+ $value3 = '';
41
+ }
42
+ $value4 = $value1.','.$value2.','.$value3;
19
- $ids = explode( ',', $value );
43
+ $ids = explode( ',', $value4 );
20
- if ( $query->is_search && !is_user_logged_in() )
44
+ if ( $query->is_search && !is_user_logged_in() )
21
- $query->set( 'post__not_in', $ids );
45
+ $query->set( 'post__not_in', $ids );
22
- return $query;
46
+ return $query;
23
47
  }
24
48
  add_filter( 'pre_get_posts', 'search_result_exclusion_protect_content' );
25
49
  ```

2

2017/10/24 09:59

投稿

退会済みユーザー
answer CHANGED
@@ -18,7 +18,7 @@
18
18
  $value = preg_replace( '/;i:.+?;i:/', ',', $value );
19
19
  $ids = explode( ',', $value );
20
20
  if ( $query->is_search && !is_user_logged_in() )
21
- $query->set( 'post__not_in', $ids );
21
+ $query->set( 'post__not_in', $ids );
22
22
  return $query;
23
23
  }
24
24
  add_filter( 'pre_get_posts', 'search_result_exclusion_protect_content' );

1

2017/10/17 09:16

投稿

退会済みユーザー
answer CHANGED
@@ -1,11 +1,25 @@
1
1
  可能か不可能かで言えば可能です。
2
- 会員にしか公開しないページのIDを書いておけばログインしていない状態だとそのIDのページを検索結果から除外します。
3
2
 
3
+ 多分、自動で出来る事を望んでるんだと思いますが、それならそう書きましょう。
4
+
5
+ そのプラグインで投稿を限定公開にした場合、投稿毎に何かしらの値が割り振られるのではなくシリアライズされたデータに投稿IDが追加されます。
6
+ それを取り出して未ログイン時に検索結果に含めないということを無理矢理すれば自動で割り振り可能ですが、もしプラグインの仕様が変更された場合この方法は意味を成さないことを覚えておいてください。
7
+
8
+ 以下をfunctions.phpに追加すれば出来るはずです。
9
+
4
10
  ```
5
- function search_result_exclusion( $query ) {
11
+ function search_result_exclusion_protect_content( $query ) {
12
+ global $wpdb;
13
+ $list = $wpdb->get_results( 'SELECT post_list FROM `wp_swpm_membership_tbl` WHERE id =1' );
14
+ $value = $list[0]->post_list;
15
+ $value = str_replace( 'i:0;i:', '', $value );
16
+ $value = str_replace( ';}', '', $value );
17
+ $value = preg_replace( '/a:.+?:{/', '', $value );
18
+ $value = preg_replace( '/;i:.+?;i:/', ',', $value );
19
+ $ids = explode( ',', $value );
6
20
  if ( $query->is_search && !is_user_logged_in() )
7
- $query->set( 'post__not_in', array( 15, 18, 20 ) );
21
+ $query->set( 'post__not_in', $ids );
8
22
  return $query;
9
23
  }
10
- add_filter( 'pre_get_posts', 'search_result_exclusion' );
24
+ add_filter( 'pre_get_posts', 'search_result_exclusion_protect_content' );
11
25
  ```