前提・実現したいこと
WordPrss の投稿ページなどにある「パスワード保護」機能を使いページにパスワードをかけた時に、
アンカーリンクのあるURLでアクセスした後、ログインするとアンカーリンクが消えてしまいます。
例
https://example.com/page/#anker
上記のようにアクセスしてログインを行うと。
https://example.com/page/
のようになってしまいます。
https://example.com/page/#ankerのURLを保持したままログインをしたいのですが、
こうなってしまうのはWordPressの仕様なのでしょうか。
試したこと
javascriptでページ読込後アンカーリンクが動作するように試したのですが、
そもそも#ankerが消えているので効果はありませんでした。
申し訳ありませんが解決方法がありましたらご教示ください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答2件
1
ベストアンサー
functions.phpにこちらを追記。
php
1add_filter( 'the_password_form', function ( $output ) { 2 global $wp; 3 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 ); 4} ); 5 6 7add_action( 'wp_footer', function () { 8 ob_start();?> 9 10<script type="text/javascript"> 11 12window.onload = function () { 13if( document.getElementById('_wp_http_referer') ){ 14 const anchor = window.location.hash; 15 console.log(anchor); 16 let redirect_to_url = document.getElementById('_wp_http_referer').value; 17 redirect_to_url = redirect_to_url + anchor; 18 document.getElementById('_wp_http_referer').value = redirect_to_url; 19 console.log(document.getElementById('_wp_http_referer').value); 20} 21} 22</script> 23<?php 24 echo do_shortcode( ob_get_clean() ); 25});
ちょっとコードが乱雑で、改良しなくてはいけないですが、、、
たぶん動作すると思います。
試してみてください。
こちらを参考にしました。
https://wordpress.org/support/topic/jump-link-into-password-protected-page/
投稿2019/08/22 06:53
総合スコア137
0
リダイレクトのためのURLにハッシュ以降が入っていなかったので、JavaScriptで書き換えるようにすると動作するようでした。
functions.phpに以下を追記して、試してみてください。
思ったような挙動になれば良いのですが!
php
1function url_plus_anchor(){ ?> 2<script type="text/javascript"> 3 4window.onload = function () { 5 let redirect_to_url = getParam('redirect_to'); 6 let form = document.forms.loginform; 7 form.redirect_to.value = redirect_to_url; 8}; 9 10function getParam(name, url) { 11 if (!url) url = window.location.href; 12 name = name.replace(/[[]]/g, "\$&"); 13 var regex = new RegExp("[?&]" + name + "(=([^&]*)|&|#|$)"), 14 results = regex.exec(url); 15 if (!results) return null; 16 if (!results[2]) return ''; 17 return decodeURIComponent(results[2].replace(/+/g, " ")); 18} 19</script> 20<?php } 21add_action( 'login_enqueue_scripts', 'url_plus_anchor' ); 22
記述が正しくないかもしれませんが適宜直してください。
getParamのところは、
http://www-creators.com/archives/4463
を参考にして、リダイレクトURLのハッシュ以降も取り出すようにしました。
投稿2019/08/22 02:41
総合スコア137
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
回答へのコメント
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
同じタグがついた質問を見る
URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。
WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。
PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2019/08/22 07:09