news_archive
というカスタム投稿タイプがあり、WordPressカテゴリを使用しています。これらのカテゴリのアーカイブページをCPTのみでコアの投稿ではなく取得したいと考えています。管理しました。このURLに出くわします。これは、カスタムアーカイブページに関連付けられているときに私が望んでいることとまったく同じです。
/stories/category/in-the-news/?post_type=archived_news/
ここで、stories
は、パーマリンクページのカスタム構造で設定されたブログ投稿のパーマリンクです。
私がやりたいのはそれを
/news/category/in-the-news/
ニュースはarchived_news
投稿のrewrite
です
私は次のようなことを試していました:
function category_cpt_rewrites() {
$categories = array( 'in-the-news', 'press-release' );
foreach ( $categories as $category ) {
$rule = '/stories/category/' . $category . '/?post_type=archived_news';
$rewrite = '/archived_news/category/' . $category . '/';
add_rewrite_rule( $rule, $rewrite, 'top' );
}
}
add_action( 'init', 'category_cpt_rewrites' );
しかし、構文が正しいとは思いません。私も正しい考えを持っていますか?
* edit Ok私はそれを機能させて、ソートしました。ルールを交換して値を書き換えてから、正しい正規表現を使用する必要がありました。
function category_cpt_rewrites() {
$categories = array( 'in-the-news', 'press-release' );
foreach ( $categories as $category ) {
$rule = '^news/category/([^/]*)/?';
$rewrite = 'index.php?post_type=archived_news&category=' . $category;
add_rewrite_rule( $rule, $rewrite, 'top' );
}
}
add_action( 'init', 'category_cpt_rewrites' );
まだ両方のカテゴリが表示されていますが、近いと思います。しかし、今ではページネーションは機能せず、理由はわかりません。 /news/category/press-release/page/2/
は最初のページと同じ投稿を返しますが、/stories/category/press-release/page/2/?post_type=archived_news
は次の投稿ページを表示します
カテゴリ({term})から特定のタイプ({post_type})の投稿を表示する場合、リンクの構造は次のようになります。
{post_type} /カテゴリ/ {term}
ページおよび「ブログ」投稿へのリンクとの衝突を回避するために、式は_([^/]+)
_で始めることはできませんが、明示的に入力された投稿タイプのスラッグを含める必要があります。これは、カスタム投稿タイプごとに個別のルールを意味します。
_$regex = '^news/category/(.+?)/?$';
_
上記の式では、_$redirect
_に_category_name
_および_post_type
_パラメーターを含める必要があります。
_$redirect = 'index.php?category_name=$matches[1]&post_type=news';
_
また、カスタム分類法(^news/custom_tax_slug/(.+?)/?$
)の場合:
_$redirect = 'index.php?CUSTOM_TAX_SLUG=$matches[1]&taxonomy=CUSTOM_TAX_SLUG&post_type=news';
_
ページネーションを処理するには、上記のルールの拡張バージョンである別のルールが必要です。
_$regex = '^news/category/(.+?)/page/?([0-9]{1,})/?$';
$redirect = 'index.php?category_name=$matches[1]&post_type=news&paged=$matches[2]';
_
すべて一緒に:
_function category_cpt_rewrites()
{
add_rewrite_rule( '^news/category/(.+?)/page/?([0-9]{1,})/?$',
'index.php?category_name=$matches[1]&post_type=news&paged=$matches[2]',
'top'
);
add_rewrite_rule( '^news/category/(.+?)/?$',
'index.php?category_name=$matches[1]&post_type=news',
'top'
);
}
_
または:
_function category_cpt_rewrites()
{
$post_types = [ 'news' ];
foreach ( $post_types as $cpt )
{
add_rewrite_rule( '^'. $cpt .'/category/(.+?)/page/?([0-9]{1,})/?$',
'index.php?category_name=$matches[1]&post_type='. $cpt .'&paged=$matches[2]',
'top'
);
add_rewrite_rule( '^'. $cpt .'/category/(.+?)/?$',
'index.php?category_name=$matches[1]&post_type=' . $cpt,
'top'
);
}
}
_