質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

0回答

1175閲覧

wordpressで自動でリダイレクトされるのを止めたいのですが、設置した関数がそもそも読み込まれていません

tenlife

総合スコア70

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

1クリップ

投稿2021/03/02 21:20

編集2021/03/04 08:05

自作のページネーション機能を実装しています。

タイトルにもある通り
自動補完リダイレクトを無効化して、元のページをそのまま表示したいです。
404ページでもありません。urlの形だけが変わり、ページはそのまま表示されるといった形にしたいです。

現状
・参考サイトをみてfunctions.phpに自動補完リダイレクト無効化する関数を追加したのですが、動作が変わらずといった状態です。

仮説
・関数自体は問題なく、関数の読み込みが怪しいと思っています

検証
・無効化する関数が読み込まれた時点でアラートが表示されるようにしました。下記記載

function call_test() { echo '<script>alert(\'関数読み込まれています!\')</script>'; } add_action('wp_head', 'call_test');

上記で、アラートが表示されなかった為関数の読み込みが怪しいと感じましたが仮説が尽きてしまいました。ちなみに関数の外からは呼び出せました。

参考サイト
参考1,似てる状況?
参考2
参考3
呼び出しメソッドの確認

記載全体

<?php function non_redirect_test( $redirect_url ) { // 関数の動作確認 function call_test() { echo '<script>alert(\'関数読み込まれています!\')</script>'; } add_action('wp_head', 'call_test'); if ( is_404() ) return false; return $redirect_url; } add_filter( 'redirect_canonical', 'non_redirect_test' );

なぜ関数がそもそも読み込まれていないのか、ミスをしてしまっていると思います。

どなたか知恵のある方居ましたら、教えていただきたいです。
よろしくお願いします。

wordpress 5.4.4

追記

以下を確認しました。

フックの使い方1
フックの使い方2

現状としては下記のようにurlは変わりますが、存在しないURLと判断されてホーム画面に戻されてしまいます。
https://hoge.com/photos/ -> https://hoge.com/photos/page_id=6

このホーム画面に戻される部分が、自動補完リダイレクトによって起きていると考えています。
これを防ぐために、redirect_canonicalフックを設定し防ごうと考えています。
使い方は下記です。

キャンセルには FALSEを返し、リダイレクトを許可するには $redirect_url を返す。

redirect_canonicalフックが効かず、ホームに戻されてしまう状態なので関数が読み込まれていないのかと仮説

アラートを表示する形で試しましたが、表示されないといった状態です。

無効化のフックを設置していますが、ホームにリダイレクトされるタイミングで呼ばれないため、ホームに戻ってしまう。
redirect_canonicalフックが何らかの理由で呼べていない

上記が現状と今の理解になります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tabuu

2021/03/02 23:35

提示されているコードは構文エラーになっていませんか? PHPのエラーメッセージをご確認ください。
hiok

2021/03/03 00:54

提示のコードは、404ならfalse、それ以外ならそのまま$redirect_urlを返す、と読めますが、そういう意図の関数で間違いないでしょうか? また、non_redirect_test関数が呼ばれた時点でcall_test関数を実行したいなら、add_actionを使わずにそのままcall_testを実行してみてはいかがでしょうか?
tenlife

2021/03/03 08:35 編集

tabuuさん コメントありがとうございます。エラーは特に検出されませんでした。もし何か怪しい点がある場合は、おそらく私がコピーする際に何かを省略していると思います。
tenlife

2021/03/03 08:38

hiokさん コメントありがとうございます。 その意図で私は求めている挙動が出来ると考えているのですが、怪しい部分がありましたでしょうか。教えていただけるとありがたいです。 その場合の呼び出し方は echo call_test(); で認識あっていますでしょうか?
hiok

2021/03/03 09:05

特定の条件でリダイレクトしないようにしたいのであれば、$redirect_rulは加工しないといけないような気がします。 例えば、参考1のサイトでは、「/page/」がURLに含まれる場合に、リダイレクトしない(自動補完しない)ようにしています。 tenlifeさんのご希望が、404だけでなく全てのページで自動補完リダイレクトを止めたい、のであれば、 return $redirect_url; の前に、参考サイト1のような $redirect_url = false; return $redirect_url; という指定が必要になるはず。 これがないと、自動補完リダイレクトが生きたまま return $redirect_url; されることになります。
tenlife

2021/03/03 09:53

hiokさん 詳細なコメントありがとうございます。 → 404だけでなく全てのページで自動補完リダイレクトを止めたい 全くその通りですので、非常に参考になります。 丁寧に解説ありがとうございます、参考にさせていただきます。
tenlife

2021/03/03 09:54

あとは関数が読み込まれていればと言うところですね。
tenlife

2021/03/03 21:04

確認なのですが、引数に入っている$redirect_urlは事前に取得する必要はあるのでしょうか? 今の考えでは、特に取得する必要はないと思っています。wordpressに元からあるグローバル変数のようなものとして捉えていいのでしょうか? https://wpdocs.osdn.jp/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0 上記リンクには確認できませんでした。
hiok

2021/03/04 00:18

$redirect_urlはグローバル変数ではありません。 redirect_canonicalフックで利用できる引数です。 redirect_canonicalフックの使い方をもう一度確認されるとよいかも。
hiok

2021/03/04 00:19

事前に取得する必要があるかどうか、ですが、tenlifeさんの要望を満たすには、おそらく、必要、です。
hiok

2021/03/04 09:11

この1行 return $redirect_url; を 以下のように $redirect_url = false; return $redirect_url; 変えてみたらいかがですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問