私は異なるカテゴリーに同じポストスラッグを使いたいです。同じスラッグを使って異なるプロジェクトを作成するからです。私はすでにポストスラッグemail
を持っています。 2番目のスラッグemail
はemail-2
になりますが、それは望ましくありません。
例えば、私はEメールのために異なるプロジェクトを持つでしょう:
www.example.com/category-one/email
www.example.com/category-two/email
www.example.com/category-three/email
カテゴリや投稿が必要ない場合は、投稿ではなく親子ページを使用して簡単に実現できます。
たとえば、次のような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;
}