web-dev-qa-db-ja.com

異なるカテゴリに同じポストスラグを使用する方法

私は異なるカテゴリーに同じポストスラッグを使いたいです。同じスラッグを使って異なるプロジェクトを作成するからです。私はすでにポストスラッグemailを持っています。 2番目のスラッグemailemail-2になりますが、それは望ましくありません。

例えば、私はEメールのために異なるプロジェクトを持つでしょう:

www.example.com/category-one/email
www.example.com/category-two/email
www.example.com/category-three/email
5
waisie li

親子ページの使用(推奨)

カテゴリや投稿が必要ない場合は、投稿ではなく親子ページを使用して簡単に実現できます。

たとえば、次のような3ページがあるとします。

www.example.com/category-one/
www.example.com/category-two/
www.example.com/category-three/

これで、スラッグemailを使って上記のページの子ページを作成できます。

www.example.com/category-one/email
www.example.com/category-two/email
www.example.com/category-three/email

これは、WordPressがページ(または他の階層型投稿タイプ)のスラッグ全体を一意とみなすために可能になります。

もちろん、これらのemail slugを持つすべての子ページは異なるページで、終了URLが同じスラッグです。

カテゴリと投稿の組み合わせを使用する

警告: デフォルトではWordPressはこれをサポートしていません。現在のパーマリンク構造として/%category%/%postname%/を持っているかもしれませんが、将来それを変更する必要がある場合はどうしますか?それからあなたは衝突があるでしょう。

また、WordPressは内部的にこれをサポートしていないため、他のプラグイン(例:カスタムパーマリンクプラグイン、SEOプラグインなど)には予期しない問題があるかもしれません。

これは wp_unique_post_slug filterフックを使って可能です。たとえば、次のサンプルプラグインでは、emailスラグを複数回使用できます。

<?php
/*
Plugin Name:  WPSE non-unique post slug
Plugin URI:   https://wordpress.stackexchange.com/a/313422/110572
Description:  WPSE non-unique post slug
Version:      1.0.0
Author:       Fayaz Ahmed
Author URI:   https://www.fayazmiraz.com/
*/

add_filter( 'wp_unique_post_slug', 'wpse313422_non_unique_post_slug', 10, 6 );

function wpse313422_non_unique_post_slug( $slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug ) {
    if( $post_type === 'post' && $original_slug === 'email' ) {
        // Perform category conflict, permalink structure
        //     and other necessary checks.
        // Don't just use it as it is.
        return $original_slug;
    }

    return $slug;
}
3
Fayaz