サポート » 使い方全般 » URLの自動補完の停止について

  • 解決済 dekazo

    (@dekazo)


    お世話になります。
    URL自動補完を停止して、意図しないパーマリンクでのアクセスは404にしようとしました。
    functions.phpへ停止コードを記載したのですが、
    投稿ページでカテゴリを変更した場合、リダイレクトされます。
    カテゴリ変更でも404とすることはできるのでしょうか?
    ご面倒おかけします。
    よろしくお願いします。

    【状況】

    (1)テーマ:Twenty Twenty-Two 1.1 WordPress:6.0 PHP:7

    (2)以下をfunctions.phpへ記載してURLの自動補完を停止しました。

    //Wordpress自動補完リダイレクト停止(前方一致)
    add_filter( ‘do_redirect_guess_404_permalink’, ‘__return_false’ );
    //旧スラッグからの自動補完リダイレクトを停止
    remove_action( ‘template_redirect’, ‘wp_old_slug_redirect’ );

    (3)パーマリンク設定は以下の通りです。

    カスタム構造 → /%category%/%postname%/

    (4)ページ状況

    旧URL → https://www.jinsei-blog.com/220506-002/uncategorized/hello-world/
    新URL → https://www.jinsei-blog.com/220506-002/newtest/hello-world/

    ★上記アドレスで再現できます(2022年5月27日)。
    ★現状は、旧URLをアドレスバーに入力すると、アドレスバー内の文字が新URLへ書き換わります。
     表示されるページには問題ありません。
    ★旧URLをアドレスバーに入力した場合、404としたいです。
    ★ドメイン・スラッグ(上記:hello-world)の相違に対しては404となります。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • こんにちは

    下記コードでカテゴリー部分の補完は停止できそうです。

    function disable_category_redirect_canonical( $redirect_url, $requested_url ) {
    	global $wp_rewrite, $wp_query;
    
    	if ( $redirect_url !== $requested_url ) {
    		if ( is_single() && strpos( $wp_rewrite->permalink_structure, '%category%' ) !== false ) {
    			$category_name = get_query_var( 'category_name' );
    			if ( $category_name ) {
    				$the_category = get_the_category();
    				if ( ! array_search( $category_name, array_column( $the_category, 'slug' ) ) ) {
    					status_header( 404 );
    					nocache_headers();
    					$wp_query->set_404();
    					return false;
    				}
    			}
    		}
    	}
    
    	return $redirect_url;
    }
    
    add_filter( 'redirect_canonical', 'disable_category_redirect_canonical', 10, 2 );

    なお、コードはあくまでもサンプルです。そのままでは動作しないかもしれません。ご自身で内容を理解した上で十分検証してください。

    トピック投稿者 dekazo

    (@dekazo)

    ishitaka 様

    お世話になります。
    返信遅くなり申し訳ありません。

    上記コード、ありがとうございます。
    全部記述していただいて、ご面倒おかけします。

    テストしてみましたが、何も問題ありません。
    希望通りの動作が実現できました。

    正直、自身が不勉強のため、頂いたコードのいくつかを理解しきれていません。
    1つ1つ確認して理解を深めてみます。

    大変助かりました。
    ありがとうございました。

    トピック投稿者 dekazo

    (@dekazo)

    すみません。
    解決済みとさせて頂きます。
    ありがとうございます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。