回答:
はい、これは可能ですが、プラグインがrewrite => array('slug' => 'post_type')
パラメーターを使用してカスタム投稿タイプを作成している場合、スラッグを置き換えることができる可能性は低いでしょう。
カスタム投稿タイプが作成されるたびに、URL書き換えルールがデータベースに書き込まれます。どのアクションがカスタム投稿タイプの作成をトリガーするか(initアクションなど)に応じて、WordPressは、どのような変更を試みようと、書き換えルールをフラッシュし、カスタム投稿タイプのスラッグを復元します。
そうは言っても、カスタム投稿タイプにカスタムスラッグを提供できます。次の例では、カスタム投稿タイプがでmovies
あり、/movies/
スラッグをに変更しようとしていると仮定しています/films/
。
完全にするために、movies
カスタム投稿タイプを定義するために使用される基本関数を以下に示します。参照しているプラグインは、次のようなことをしているはずです。
function movies_register_post_type() {
register_post_type(
'movies',
array(
'labels' => array(
'name' => __('Movies'),
'singular_name' => __('Movie')
),
'public' => true,
'has_archive' => true,
'rewrite' => array(
'slug' => 'movies'
)
)
);
} // end example_register_post_type
add_action('init', 'movies_register_post_type');
既存の投稿タイプに基づいて独自のカスタムルールを提供することにより、オプションテーブルを変更できます。
基本的に、これを行います:
これを行う方法は次のとおりです。
function add_custom_rewrite_rule() {
// First, try to load up the rewrite rules. We do this just in case
// the default permalink structure is being used.
if( ($current_rules = get_option('rewrite_rules')) ) {
// Next, iterate through each custom rule adding a new rule
// that replaces 'movies' with 'films' and give it a higher
// priority than the existing rule.
foreach($current_rules as $key => $val) {
if(strpos($key, 'movies') !== false) {
add_rewrite_rule(str_ireplace('movies', 'films', $key), $val, 'top');
} // end if
} // end foreach
} // end if/else
// ...and we flush the rules
flush_rewrite_rules();
} // end add_custom_rewrite_rule
add_action('init', 'add_custom_rewrite_rule');
これで、ムービーにアクセスする2つの方法があります。
/movies/Back-To-The-Future
/films/Back-To-The-Future
頻繁に起動add_custom_rewrite_rule
されるため、init
アクションにフックすることはお勧めしません。これは単なる例です。関数を適用するより良い場所は、テーマのアクティブ化、プラグインのアクティブ化、おそらくsave_postアクションなどです。実行する必要に応じて、1回または数回だけ実行する必要があります。
この時点で、カスタム投稿タイプのパーマリンクを更新して ' /movies/
スラッグを使用することを検討できます。たとえば、に移動すると/films/
、すべての映画のリストが表示されますが、タイトルの上にマウスを移動すると、/movies/
ナメクジがまだ使用されていることがわかります。
さらに一歩進むには、技術的に301リダイレクトをインステートにしてすべてのリンクをキャッチ/movies/
し、/films/
対応するものにリダイレクトすることができますが、これは何をしようとしているかによって異なります。
$post
でadd_custom_rewrite_rule()
機能が、それは「非オブジェクトのプロパティを取得しようとすると」言ってWP Adminでエラーを投げています。メタ値を取得するために$ postを取得するにはどうすればよいですか?
このコードは、私の子テーマに適しています。「プログラム」スラッグを「場所」に変更する必要がありました。
/*
CHANGE SLUGS OF CUSTOM POST TYPES
*/
function change_post_types_slug( $args, $post_type ) {
/*item post type slug*/
if ( 'program' === $post_type ) {
$args['rewrite']['slug'] = 'place';
}
return $args;
}
add_filter( 'register_post_type_args', 'change_post_types_slug', 10, 2 );
/*
CHANGE SLUGS OF TAXONOMIES, slugs used for archive pages
*/
function change_taxonomies_slug( $args, $taxonomy ) {
/*item category*/
if ( 'program-category' === $taxonomy ) {
$args['rewrite']['slug'] = 'locations';
}
return $args;
}
add_filter( 'register_taxonomy_args', 'change_taxonomies_slug', 10, 2 );
$args['has_archive'] = false
機能します。設定する必要があり、これは機能しました。