私は2つのカスタム投稿タイプがあります。
これら2つのCTPが共有する新しい分類法があります。
「domain.com/events/」にアクセスすると、すべてのイベントのアーカイブが表示され、「domain.com/bususiness/」に移動すると、すべてのビジネスのアーカイブが表示されます。ここまでは順調ですね。
"domain.com/locations/"にアクセスすると、すべてのイベントと企業のアーカイブが表示されます。これは問題ありません。
ただし、イベントの開催地のみを表示するにはどうすればよいですか。 「domain.com/locations/events」または「domain.com/events/locations」は機能しません。
場所の分類法またはCPTのいずれかで書き換え設定を変更する必要がありますか?それは私が立ち往生しているようです!
いくつかの新しい書き換えルールを追加する必要がありますが、ありがたいことにWordPressを使用すると、いくつかの関数呼び出しを使用してかなり簡単になります。
// use the init action to modify rewrite rules
add_action( 'init', function() {
global $wp_rewrite;
// add rewrite tag for the post type
// - %posttype% is a new tag that will be replaced with the regex in the actual query
// - the regex will extract the post_type name from the URL and use it in the query
add_rewrite_tag( '%posttype%', '([^/]+)', 'post_type=' );
// create the new permastruct by combining the post type & taxonomy permastructs
// - custom taxonomies and post types are added to the extra_permastructs array in WP_Rewrite
// - change 'category' to desired taxonomy
// - output will be '%posttype%/category/%category%'
$types_and_cats_permastruct = '%posttype%' . $wp_rewrite->get_extra_permastruct( 'category' );
// add the permastruct for post type & taxonomy
add_permastruct( 'post_type_and_category', $types_and_cats_permastruct, array(
'with_front' => true, // - with_front (bool) - Should the structure be prepended with WP_Rewrite::$front? Default is true.
'ep_mask' => EP_ALL_ARCHIVES, // - ep_mask (int) - Endpoint mask defining what endpoints are added to the structure. Default is EP_NONE.
'paged' => true, // - paged (bool) - Should archive pagination rules be added for the structure? Default is true.
'feed' => true, // - feed (bool) - Should feed rewrite rules be added for the structure? Default is true.
'forcomments' => false, // - forcomments (bool) - Should the feed rules be a query for a comments feed? Default is false.
'walk_dirs' => false, // - walk_dirs (bool) - Should the 'directories' making up the structure be walked over and rewrite
// rules built for each in turn? Default is true.
'endpoints' => true // - endpoints (bool) - Should endpoints be applied to the generated rewrite rules? Default is true.
) );
} );
したがって、私が上でやっていることを説明するには:
add_rewrite_tag()
を使用して書き換えタグを追加すると、URLにカスタム投稿タイプ名(たとえば、/ events/location/uk /)を入力すると、正規表現と結果のクエリによって認識されますWP実行にはpost_type=events
が含まれます/event/location/uk
はukイベントを、/business/location/uk
はukビジネスを表示しますadd_permastruct()
を使用して新しいパーマ構造を追加すると、WPがパーマリンクが更新されるたびに新しい書き換えルールを生成します。 3番目のパラメーターでは、walk_dirs
と/%posttype%/category/
のアーカイブでいくつかの望ましくない積極的な書き換えルールを取得するため、/%posttype%/
をfalseに設定することが非常に重要です。the_terms()
を使用して、元の投稿タイプのみを表示するビジネスまたはイベントのロケーションリンクを出力する場合は、URLをフィルタリングするか、パーマ構造に一致するようにURLを出力するカスタム関数を記述する必要があります'rewrite'を使用してregister_taxonomy関数を呼び出すときに引数で使用するスラッグを指定できます。
だから、あなたは次のようなものがあるでしょう:
$args = array(
'labels' => $labels,
'rewrite' => array( 'slug'=>'events/locations' )
);
register_taxonomy( 'event_location_tax_name', 'event_location_cpt_name', $args );
そして、企業向けに複製します。
$args = array(
'labels' => $labels,
'rewrite' => array( 'slug'=>'businesses/locations' )
);
register_taxonomy( 'business_location_tax_name', 'business_location_cpt_name', $args );
それが役立つことを願っていますか。
ありがとうリック