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

回答編集履歴

1

追記

2020/08/22 13:46

投稿

退会済みユーザー
answer CHANGED
@@ -15,4 +15,44 @@
15
15
  1と2は同じ事ではないのか。
16
16
  とりあえず可能。然程難しくもない。
17
17
 
18
- 3は、リンクを辿っても到達できないページならばそうだろうな。
18
+ 3は、リンクを辿っても到達できないページならばそうだろうな。
19
+
20
+
21
+ **追記**
22
+
23
+ > 特定のURLのリファラ
24
+
25
+ > 特定のHTMLメールからしかアクセスできないページにするとそれはそれで解決するかな?
26
+
27
+ メール等のリンクじゃリファラは存在しないから無理。
28
+
29
+ とりあえず最初の話し。
30
+ 変換とか考えるからややこしくなる。
31
+
32
+ 例えばURLがこんな感じだったとする
33
+ http://example.com/test/?code=12345
34
+
35
+ カスタムフィールドのメタキー`code`
36
+ 値`12345`
37
+ こんな感じの情報を事前に登録しておく。
38
+
39
+ これで以下のようなコードを書いておけばURLパラメータの`code`の値とカスタムフィールドの値が一致すればパスワードの入力欄に設定したパスワードを入力した状態になる。
40
+ パラメータ無しや異なるパラメータ付きURLではパスワード入力欄が出ない。
41
+
42
+ ```
43
+ add_filter( 'the_password_form', function( $output ) {
44
+ $post_id = get_the_ID();
45
+ $code = get_post_meta( $post_id, 'code', true );
46
+ $string = str_replace( 'code=', '', $_SERVER['QUERY_STRING'] );
47
+ if( $string === $code ) {
48
+ $label = 'pwbox-' . ( empty( $post_id ) ? rand() : $post_id );
49
+ $output = '<form action="' . esc_url( site_url( 'wp-login.php?action=postpass', 'login_post' ) ) . '" class="post-password-form" method="post">
50
+ <p>' . __( 'This content is password protected. To view it please enter your password below:' ) . '</p>
51
+ <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>
52
+ ';
53
+ } else {
54
+ $output = '閲覧できません';
55
+ }
56
+ return $output;
57
+ } );
58
+ ```