回答編集履歴

1

追記

2020/08/22 13:46

投稿

退会済みユーザー
test CHANGED
@@ -33,3 +33,83 @@
33
33
 
34
34
 
35
35
  3は、リンクを辿っても到達できないページならばそうだろうな。
36
+
37
+
38
+
39
+
40
+
41
+ **追記**
42
+
43
+
44
+
45
+ > 特定のURLのリファラ
46
+
47
+
48
+
49
+ > 特定のHTMLメールからしかアクセスできないページにするとそれはそれで解決するかな?
50
+
51
+
52
+
53
+ メール等のリンクじゃリファラは存在しないから無理。
54
+
55
+
56
+
57
+ とりあえず最初の話し。
58
+
59
+ 変換とか考えるからややこしくなる。
60
+
61
+
62
+
63
+ 例えばURLがこんな感じだったとする
64
+
65
+ http://example.com/test/?code=12345
66
+
67
+
68
+
69
+ カスタムフィールドのメタキー`code`
70
+
71
+ 値`12345`
72
+
73
+ こんな感じの情報を事前に登録しておく。
74
+
75
+
76
+
77
+ これで以下のようなコードを書いておけばURLパラメータの`code`の値とカスタムフィールドの値が一致すればパスワードの入力欄に設定したパスワードを入力した状態になる。
78
+
79
+ パラメータ無しや異なるパラメータ付きURLではパスワード入力欄が出ない。
80
+
81
+
82
+
83
+ ```
84
+
85
+ add_filter( 'the_password_form', function( $output ) {
86
+
87
+ $post_id = get_the_ID();
88
+
89
+ $code = get_post_meta( $post_id, 'code', true );
90
+
91
+ $string = str_replace( 'code=', '', $_SERVER['QUERY_STRING'] );
92
+
93
+ if( $string === $code ) {
94
+
95
+ $label = 'pwbox-' . ( empty( $post_id ) ? rand() : $post_id );
96
+
97
+ $output = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" class="post-password-form" method="post">
98
+
99
+ <p>' . __( 'This content is password protected. To view it please enter your password below:' ) . '</p>
100
+
101
+ <p><label for="' . $label . '">' . __( 'Password:' ) . ' <input name="post_password" id="' . $label . '" type="password" size="20" value="'.get_post( $post_id )->post_password.'" /></label> <input type="submit" name="Submit" value="' . esc_attr_x( 'Enter', 'post password form' ) . '" /></p></form>
102
+
103
+ ';
104
+
105
+ } else {
106
+
107
+ $output = '閲覧できません';
108
+
109
+ }
110
+
111
+ return $output;
112
+
113
+ } );
114
+
115
+ ```