回答編集履歴

3

2017/10/24 10:00

投稿

退会済みユーザー
test CHANGED
@@ -12,35 +12,83 @@
12
12
 
13
13
 
14
14
 
15
- 以下をfunctions.phpに追加すれば出来るです。
15
+ 対象固定ページだったのです
16
16
 
17
+ 失礼しました。それならpost_listをpage_listに変えたら良いだけでした。
17
18
 
19
+ 制限をかけたページが限定されててそれ以上増えないならIDを指定するだけの単純なやり方で良いと思いますが、増えないとも限らないという前提でもうかなりのやっつけですが、投稿・固定ページ・カスタム投稿で閲覧制限を設けた場合に検索対象に出来るはずです。
18
20
 
19
21
  ```
20
22
 
21
23
  function search_result_exclusion_protect_content( $query ) {
22
24
 
25
+ if ( is_search() );
26
+
23
27
  global $wpdb;
24
28
 
25
- $list = $wpdb->get_results( 'SELECT post_list FROM `wp_swpm_membership_tbl` WHERE id =1' );
29
+ $post_list = $wpdb->get_results( 'SELECT post_list FROM `wp_swpm_membership_tbl` WHERE id =1' );
26
30
 
27
- $value = $list[0]->post_list;
31
+ $page_list = $wpdb->get_results( 'SELECT page_list FROM `wp_swpm_membership_tbl` WHERE id =1' );
28
32
 
29
- $value = str_replace( 'i:0;i:', '', $value );
33
+ $custom_post_list = $wpdb->get_results( 'SELECT custom_post_list FROM `wp_swpm_membership_tbl` WHERE id =1' );
30
34
 
31
- $value = str_replace( ';}', '', $value );
35
+ if ( $post_list[0]->post_list !== 'a:0:{}' && $post_list[0]->post_list !== 'N;' ) {
32
36
 
33
- $value = preg_replace( '/a:.+?:{/', '', $value );
37
+ $value = $post_list[0]->post_list;
34
38
 
35
- $value = preg_replace( '/;i:.+?;i:/', ',', $value );
39
+ $value = preg_replace('/a:[0-9]:{i:[0-9];i:/', '', $value );
36
40
 
37
- $ids = explode( ',', $value );
41
+ $value = preg_replace( '/;i:[0-9];i:/', ',', $value );
38
42
 
39
- if ( $query->is_search && !is_user_logged_in() )
43
+ $value1 = str_replace( ';}', '', $value );
40
44
 
41
- $query->set( 'post__not_in', $ids );
45
+ } else {
42
46
 
47
+ $value1 = '';
48
+
49
+ }
50
+
51
+ if ( $page_list[0]->page_list !== 'a:0:{}' && $page_list[0]->page_list !== 'N;' ) {
52
+
53
+ $value = $page_list[0]->page_list;
54
+
55
+ $value = preg_replace('/a:[0-9]:{i:[0-9];i:/', '', $value );
56
+
57
+ $value = preg_replace( '/;i:[0-9];i:/', ',', $value );
58
+
59
+ $value2 = str_replace( ';}', '', $value );
60
+
61
+ } else {
62
+
63
+ $value2 = '';
64
+
65
+ }
66
+
67
+ if ( $custom_post_list[0]->custom_post_list !== 'a:0:{}' && $custom_post_list[0]->custom_post_list !== 'N;' ) {
68
+
69
+ $value = $custom_post_list[0]->custom_post_list;
70
+
71
+ $value = preg_replace('/a:[0-9]:{i:[0-9];i:/', '', $value );
72
+
73
+ $value = preg_replace( '/;i:[0-9];i:/', ',', $value );
74
+
75
+ $value3 = str_replace( ';}', '', $value );
76
+
77
+ } else {
78
+
79
+ $value3 = '';
80
+
81
+ }
82
+
83
+ $value4 = $value1.','.$value2.','.$value3;
84
+
85
+ $ids = explode( ',', $value4 );
86
+
87
+ if ( $query->is_search && !is_user_logged_in() )
88
+
89
+ $query->set( 'post__not_in', $ids );
90
+
43
- return $query;
91
+ return $query;
44
92
 
45
93
  }
46
94
 

2

2017/10/24 09:59

投稿

退会済みユーザー
test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  if ( $query->is_search && !is_user_logged_in() )
40
40
 
41
- $query->set( 'post__not_in', $ids );
41
+ $query->set( 'post__not_in', $ids );
42
42
 
43
43
  return $query;
44
44
 

1

2017/10/17 09:16

投稿

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