web-dev-qa-db-ja.com

最初のカテゴリのアーカイブページを通常のページにリダイレクトする

最初のカテゴリのアーカイブページのみを、作成した通常のページにリダイレクトする方法を探しています。

このコードを使用していますが、これはカテゴリアーカイブのすべてのページをリダイレクトします。カテゴリアーカイブの最初のページだけをリダイレクトします。

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' );
1
Joanna Mikalai

ページ付けされたページをリダイレクトしたくない場合は、 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' );
1
Xhynk