WordPressのSnow Monkeyで作っているWEBページにて、パスワード保護したページのページ内アンカーリンクを利用しようとしても、パスワードを入力したタイミングで、アンカーリンクの部分が引き継ぎできない。
アンカーリンクを引き継ぎするようにカスタマイズした。
前提となるのは、Snow Mokeyの場合は、パスワード保護の部分は、独自パーツになっており、snow-monkey/app/setup/protected.php の中でも、
add_filter(
'the_password_form',
....
11
);
は使われており、優先度が 11 に設定されている。そのため、カスタマイズするコードでは、優先度を大きな数字(12以上)にして、Snow Monkeyのコードの実行後にしないと、上手くいかない。なお、省略すると、10 なので、注意が必要だ。
my-snow-monkey.phpに以下のコードを追加するとOKだ。
/* WordPressパスワード保護ページでログイン後アンカーリンクを保持 */
add_filter( 'the_password_form', function ( $output ) {
global $post;
global $wp;
return str_ireplace( '</form>', '<input type="hidden" id="_wp_http_referer" name="_wp_http_referer" class="_wp_http_referer" value="' . trailingslashit( home_url( $wp->request ) ) . '"></form>', $output );
},12 );
add_action( 'wp_footer', function () {
ob_start();?>
<script type="text/javascript">
window.onload = function () {
if( document.getElementById('_wp_http_referer') ){
const anchor = window.location.hash;
console.log(anchor);
let redirect_to_url = document.getElementById('_wp_http_referer').value;
redirect_to_url = redirect_to_url + anchor;
document.getElementById('_wp_http_referer').value = redirect_to_url;
console.log(document.getElementById('_wp_http_referer').value);
}
}
</script>
<?php
echo do_shortcode( ob_get_clean() );
});
これで、パスワード保護のページでも、ページ内アンカーリンクを利用できる。
参考記事はこちら。感謝です。