最初のカテゴリのアーカイブページのみを、作成した通常のページにリダイレクトする方法を探しています。
このコードを使用していますが、これはカテゴリアーカイブのすべてのページをリダイレクトします。カテゴリアーカイブの最初のページだけをリダイレクトします。
function my_page_template_redirect()
{
if ( is_category( 'news-articles' ) ) {
$url = site_url( '/news' );
wp_safe_redirect( $url, 301 );
exit();
}
}
add_action( 'template_redirect', 'my_page_template_redirect' );
ページ付けされたページをリダイレクトしたくない場合は、 is_paged()
booleanをチェックしてください。あなたが1ページ(アーカイブの最初のページ)より大きいアーカイブページにいるならば、それはtrueを返します。したがって、falseが返された場合は、リダイレクトしたいページにアクセスしていることを意味します。
function my_page_template_redirect(){
$category_array = array(
'news-articles',
'category-2',
'category-3',
//...
'category-8'
);
if( is_category( $category_array ) && !is_paged() ){
$url = site_url( '/news' );
wp_safe_redirect( $url, 301 );
exit();
}
}
add_action( 'template_redirect', 'my_page_template_redirect' );
あるいは、現在のページ値を get_query_var()
で確認できます。これは次のようになります。
function my_page_template_redirect(){
if( is_category( 'news-articles' ) && get_query_var( 'paged' ) == 0 ){
$url = site_url( '/news' );
wp_safe_redirect( $url, 301 );
exit();
}
}
add_action( 'template_redirect', 'my_page_template_redirect' );
目的のURLがカテゴリごとに異なり、カテゴリ名からURLを取得できない場合は、オーバーヘッドをかけずに次のようなものが必要になることがあります。
function my_page_template_redirect(){
$category_array = array(
'news-articles' => '/news',
'category-2' => '/cat-2',
'third-category' => '/third_category',
//...
'NumberEight' => '/Eight'
);
foreach( $category_array as $category => $url ){
if( is_category( $category ) && !is_paged() ){
$url = site_url( $url );
wp_safe_redirect( $url, 301 );
exit();
}
}
}
add_action( 'template_redirect', 'my_page_template_redirect' );