LoginSignup
brian67
@brian67

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

hrefで正しいページに飛ばない

解決したいこと

HPをワードプレスで作成しております。
ヘッダーにあるリンクをクリックすると正しいページに飛ぶ場合とクリックしたときのページのままURLのみ変わる時があります。この現象が起こる理由を理解し、正しいページに毎回飛ぶようにしたいです。

コード

<li><a href="<?php home_url(); ?>/career/career/">Career</a></li>


自分で試したこと

Chromeにて主に編集していました。chromeだと最初に書いたように挙動が一定ではありません。しかしedgeで試すと毎回正しいページに飛びません。また、ワードプレスにログインした状態でchromeで試すと毎回正しいページに飛びます。間違ったページといいましたが、毎回index.phpのページに飛びます。しかしその際のURLは正しいページのURLが表示されています。

0

3Answer

質問のコードから PHP がレンダリングする html ソースはどうなっているのですか?

ブラウザは href 属性に指定されている url を GET 要求するだけなので、html ソースが同じであれば「クリックすると正しいページに飛ぶ場合とクリックしたときのページのままURLのみ変わる時があります」ということは起こり得ないはずです。

html ソースが同じなのに Chrome と Edge で「chromeだと最初に書いたように挙動が一定ではありません。しかしedgeで試すと毎回正しいページに飛びません」という違いが出るとすると、サーバー側でブラウザによって動作を変えているぐらいしか思い当たることがないですが、そういうことをしているのですか?

0Like

ログインした状態でchromeで試すと毎回正しいページに飛びます

質問文から権限の内容は分かりかねますが上記の状態から推測するに、「当該ページを非公開」または「例えば、管理者権限(※例示として管理者権限と明記しているだけです)でしか閲覧できない状態になっている(functions.phpまたは関連ファイルにて、if文でそのような処理をしている)」とかでしょうか?

間違ったページといいましたが、毎回index.phpのページに飛びます。しかしその際のURLは正しいページのURLが表示されています。

当該ページのテンプレートファイルを作ってない(かつ404.phpも存在しない場合)と、WordPressはテンプレート階層の最下層であるindex.phpを表示します。上記で「毎回正しいページに飛びます」と仰っているのでこれは違うかもしれませんが…

0Like

Comments

  1. @brian67

    Questioner

    ただいまfunction.phpを確認したところ、アーカイブを有効にし任意のURLで表示する以下のif文がありましたが、それ以外はありませんでした。
    function post_has_archive($args, $post_type) {
    if ('post'== $post_type) {
    $args['rewrite']= true;
    $args['has_archive']= 'news';
    $args['label']= 'News';
    }
    return $args;
    }

    また404.phpが存在していなかったので、新たに作成しました。
    そして以下のことを試しました
    ①Chrome ログアウトした状態で問題のリンクをクリック→404
    ②Chrome ログインした状態でリンクをクリック→正しいページに移動
    ③Edge ログアウトした状態で問題のリンクをクリック→404
    ④Edge ログインした状態でリンクをクリック→正しいページに移動

    上記のことからいえるのはログインせずにクリックするとエラーが発生し404へ、ログインしているとエラーは起きずに正しいページに飛んでいるということです。

    またほかのhrefも同様かと認識しておりましたが、ある1つのhrefのみこの現象が起きております。やはりここのパスがおかしいのでしょうか。
    ログインしているときとしていないときで動作が変わるのがどうも解せませんが、これについてはなにかご存じでしょうか。

    404.phpを作成したおかげで少しだけ話が進みました、ありがとうございます。

  2. @brian67 さん
    確認いただきありがとうございます。

    ログインしているときとしていないときで動作が変わる

    こちらにつきましては私が回答したケースに該当しない場合、私も初めて見る現象なので適切な解を持ち合わせておりません。ご了承ください。

    WordPressは仕組み的にURL(パス)に準拠したテンプレート階層に則ってHTMLデータを生成するので、404ページが表示されるということは、やはり当該ページ(career/career)が存在しないと判定されているように思えます。

    もしかしすると同じ文字列(career/career)なので判別がつかずエラー?を起こしているのかもしれませんので、可能であれば変更されてみてはいかがでしょうか?(例:career/career-detail)

    あと、URLパスの指定に関して私は以下のようにエスケープ処理を挟んだ記述をすることが多いです。

    - <a href="<?php home_url(); ?>/career/career/">Career</a>
    + <a href="<?php echo esc_url(home_url('/career/career/')); ?>">Career</a>
    
  3. 横レス失礼します。

    また404.phpが存在していなかったので、新たに作成しました。そして以下のことを試しました
    ①Chrome ログアウトした状態で問題のリンクをクリック→404
    ②Chrome ログインした状態でリンクをクリック→正しいページに移動
    ③Edge ログアウトした状態で問題のリンクをクリック→404
    ④Edge ログインした状態でリンクをクリック→正しいページに移動

    ある1つのhrefのみこの現象が起きております。やはりここのパスがおかしいのでしょうか。

    上記の症状から想像するに、その「ある1つのhref」はユーザー認証が必要で、匿名ユーザーがその url にアクセスすると、正しく認証システムが実装・設定されていればログインページにリダイレクトされるが、何か設定が間違っているとかでリダイレクト先が見つからず、404 応答が返ってくるということのように思えます。違いますか?

    認証システムがらみの問題のようですが、質問者さんは自分で認証システムを実装した訳ではなくて、そのあたりはどういう仕組みになっているか、どういう設定にすればよいかが分かってないということでしょうか?

@benjuwan さん

ご回答ありがとうございます。
パス変更の件、試してみたもののダメでした。また、career/career このパスのように〇〇/〇〇というパスがほかにもありますが、そちらは正しく動作しているので、ほかの可能性も探ってみたいと思います。

エスケープ処理の件もありがとうございます。ほかのリンクもエスケープ処理が入っていないので入れてみたいと思います。ありがとうございます。

0Like

Comments

  1. @brian67

    Questioner

    @SurferOnWww さん

    ご回答ありがとうございます。ログインページとはワードプレスのログインページのことでしょうか。ワードプレスにログインした状態とログオフ状態でクリックをし、動作の違いを記述いたしました(ブラウザ別で)。

    また認証システムとありますが、私が配置したリンクは別のページ(例:こちらでいうところのホームから質問に飛ぶようなリンク)に飛ぶリンクを指しており、なにも認証はしておりません。もしくは別の認証システムをご指摘されているのでしょうか。

    ご指摘にありましたが、このHPは私が初めから作成したものではなく、途中から引き継いだものなので理解していない部分も多々あるのはおっしゃる通りでございます。

  2. @brian67 さん
    検証ありがとうございます。

    もしcareer/careerのページが固定ページだとすると、一つの可能性としてカスタムテンプレートの適用が適切になされていないのかもしれません。

    スクリーンショット 2024-03-19 8.47.30.png

    参考サイト

    エスケープ処理に関してはesc_urlのほか、esc_html,esc_attr,wp_kses_postなど各種あります。こちらも念の為に参考サイトを載せておきます。

    参考サイト

    あとはダッシュボード(管理画面)の[設定]-[パーマリンク設定]で何も変更せず[保存]をしてみると不具合が直ることもあります。(※行う際は念の為バックアップなどを取ってください)

  3. また認証システムとありますが、私が配置したリンクは別のページ(例:こちらでいうところのホームから質問に飛ぶようなリンク)に飛ぶリンクを指しており、なにも認証はしておりません。

    「ログイン」=「認証」と思ってもらっていいです。

    あなたのログイン(認証)システムがどうなっているかは、自分はエスパーでないのでわかりませんが、多分以下のようなことをしているのではないかと想像してます。

    WordPressで会員認証ページを作る
    https://yusk.org/memo/wp/member_only_page.html

    "実はauth_redirect()を使うと、“ログインしていないユーザーは強制的にログイン画面へ遷移させる”ということができる"

    どうですか?

    このHPは私が初めから作成したものではなく、途中から引き継いだものなので理解していない部分も多々ある

    勉強して基本的な知識をつけて、あなたの web アプリがどうなっているかをちゃんと理解してください。でないと話が通じません。

  4. @brian67

    Questioner

    @benjuwan さん

    画像ありがとうございます。
    残念ながらcarrer/careerのページは固定ページではないのです。
    正しく動作するページのコード、ディレクトリ配置等再度比較してみたいと思います。

    エスケープ処理に関してご丁寧に参考サイトまで乗せていただきありがとうございます。

  5. @brian67

    Questioner

    @SurferOnWww さん

    私が”ワードプレスにログイン”と書いたことよろしくなかったのか、はたまたまだ自分が理解していないのかよくわかりませんが、HP内で会員認証のようなことは一切しておりません。

    勉強しながら作成しております。
    今回も良い勉強だと思って踏ん張ってみたいと思います。ご指摘ご感謝いたします。

  6. 私が”ワードプレスにログイン”と書いたことよろしくなかったのか、はたまたまだ自分が理解していないのかよくわかりませんが、HP内で会員認証のようなことは一切しておりません。

    話が通じてないようです。

    先に、

    ①Chrome ログアウトした状態で問題のリンクをクリック→404
    ②Chrome ログインした状態でリンクをクリック→正しいページに移動
    ③Edge ログアウトした状態で問題のリンクをクリック→404
    ④Edge ログインした状態でリンクをクリック→正しいページに移動

    と書きましたよね。

    ということは、あなたが「HP内で会員認証のようなことは一切しておりません」と思っているだけで、実際には間違いなくユーザー認証の機能が実装されているということ以外にあり得ないと思いますけど。

  7. @brian67

    Questioner

    @SurferOnWww さん

    整理させてください。私が申している"ワードプレスにログイン・ログアウト"というのはURLの後に/wp-login.php等を入力しID、PW入力して管理画面に入ることを意味しています。
    なので以下の記述は"ワードプレスに"という文は初めに書いたので省略いたしました。
    ①Chrome ログアウトした状態で問題のリンクをクリック→404
    ②Chrome ログインした状態でリンクをクリック→正しいページに移動
    ③Edge ログアウトした状態で問題のリンクをクリック→404
    ④Edge ログインした状態でリンクをクリック→正しいページに移動

    上記の記述からGoogleやマイクロソフトのアカウントにログインして、という意味にとらえられたのであろうかと思います。"自分で試したこと"であらかじめ説明しているので伝わるものかと思いましたが、混乱を招いたのであれば、失礼いたしました。

    問題解決に向かう議論ではないように思えますのでこれにて失礼いたします。
    ありがとうございました。

  8. 上記の記述からGoogleやマイクロソフトのアカウントにログインして、という意味にとらえられたのであろうかと思います。

    そんなことは一言も言ってません。私が「Googleやマイクロソフトのアカウント」の話をしていると思ってます? 何を勘違いしているんですか? 私はあなたの WordPress アプリのログインの話と理解してレスしています。

    問題解決に向かう議論ではないように思えますのでこれにて失礼いたします。

    問題解決に向かう話をしているつもりですけど? あなたが理解できなくて話が通じてないように思いますけど。

  9. @brian67

    Questioner

    そうでしたか、大変失礼いたしました。

  10. @SurferOnWww さん
    失礼いたします。
    少し前にJavaScriptにおけるDOMContentLoadeddeferの件で、当方に丁寧にご説明いただいたことを覚えています。
    そのおかげで知識として身につけ、今でも活かすことができているので改めて感謝申し上げます。

    今回のやり取りはボタンの掛け違いな部分も大いにあると思います。
    (私だけかもしれませんが)質問や意見交換は結構勇気が要ることだったりしますので、私に教えてくださった時のように建設的にやり取りしていただきますと双方良い気持ちになるかもしれません。

    出過ぎた真似で恐縮です。ご気分を害されたなら申し訳ありません。

    @brian67 さん
    問題解決のお力になれず申し訳ないです。
    もしプラグインを使用されている場合、それらを一つひとつ無効化して検証していくのもWordPressでは有効な手段になります。

    あとは、ChatGPTなど生成AIに聞くのも有効だと思います。
    質問する際のコードの取り扱いには注意すべきですが、コミュニケーションコストもかからないと思います。(※ここでいうコミュニケーションコストとは、質問して回答を確認して〜という時間的な意味合いです)

  11. @brian67

    Questioner

    @benjuwan さん
    有効な手段をご提示いただきありがとうございます。
    先ほどパーマリンクが正しく保存されずこのような状態になることがあるという記事を発見致しました。プラグインの無効化とパーマリンクリセット等試していきたいと思います。

    おっしゃる通り時間的なコストを省けるのと、私のようなまだまだ知識、理解がともに足らないようなものには、生成AIで一方的に聞くこともよいかもしれません。

    解決に至りましたらまたこちらへ展開したいと思います。
    ありがとうございました。

  12. @brian67

    Questioner

    @benjuwan さん
    先ほどの問題解決することができました。
    非常にお恥ずかしい話で、クリックしても表示できなかったページは非公開設定にされておりました。それを公開に変えることで無事表示することができました。
    仰っていたやり方を試すべくプラグインをすべて無効化したのちにふと気が付きました。きっかけをくださりありがとうございました。

  13. @brian67 さん
    解決されたようで何よりです。お疲れ様でした。

    クリックしても表示できなかったページは非公開設定にされておりました。

    上記についてですが、私の最初の回答で尋ねていた部分です。

    質問文から権限の内容は分かりかねますが上記の状態から推測するに、「当該ページを非公開」または...(以下略)

    デバック処理は分からないことの解決なのでいつも以上に頭に負荷がかかる気持ちは分かりますが、回答をしっかり読んで試してから次のステップ(質問の追加など)へ進むと良いと思います。

  14. @brian67

    Questioner

    @benjuwan さん
    仰る通り一番初めにありました。お手を煩わせてしまい申し訳ありませんでした。
    以後、デバック時は二の舞にならないよう進めたいと思います。本日中に解決できてよかったです。
    ありがとうございました。

Your answer might help someone💌