Woocommerce:如果类别页面上只有一个产品,如何自动重定向到单个产品?

时间:2016-05-21 21:04:45

标签: redirect woocommerce

我尝试跳过类别存档页面,并在该类别中只有一个产品时直接转到单个产品页面。

这是我到目前为止的代码,(不工作):

add_action( 'template_redirect', 'woo_redirect_single_product_cat', 10 );

function woo_redirect_single_product_cat() {

global $wp_query, $wp;;

if  ( is_post_type_archive( 'product' ) && 1 === $wp_query->found_posts  ) {

    $product = wc_get_product($wp_query->post->ID);

       if ( $product && $product->is_visible() ) {
            wp_safe_redirect( get_permalink( $product->id ), 302 );
            exit;

       }
}
}

此代码以Woocommerce中的单一搜索重定向为模型:

https://github.com/woothemes/woocommerce/blob/fce8dc0868439474c24f7317af50ce7627f0d1c1/includes/wc-template-functions.php#L43

谢谢!

3 个答案:

答案 0 :(得分:4)

我想出来了,但不是专门针对Woocommerce :(编辑:现在是。)

/* Redirect if there is only one product in the category or tag, or anywhere... */

function redirect_to_single_post(){
global $wp_query;
if( (is_product_category() || is_product_tag()) && $wp_query->post_count == 1 )//Woo single only
//if( is_archive() && $wp_query->post_count == 1 )//redirect all single posts 
{
    the_post();
    $post_url = get_permalink();
    wp_safe_redirect($post_url , 302 );
exit;
}
} 
add_action('template_redirect', 'redirect_to_single_post');

在某种程度上,这甚至更好,因为它也重定向单个标签。

答案 1 :(得分:1)

functions.php中添加此代码,这将有效。!

add_action( 'template_redirect', 'woocom_redirect_if_single_product_in_category', 10 );
function woocom_redirect_if_single_product_in_category() {
    if ( is_product_category() ){
        $cat_name   =   sanitize_title( woocommerce_page_title( false ) );
        $args   =   array(
                "post_type"         => "product",
                "posts_per_page"    =>  -1,
                "product_cat"       => $cat_name
        );
        $posts  = new WP_Query( $args );
        if( count( $posts->posts ) == 1 ){
            $one_post_ID    =   $posts->posts;
            $ID =   $one_post_ID[0]->ID;
            wp_redirect( get_permalink( $ID ) );
        }
    }
}

答案 2 :(得分:0)

我尝试了这个修复,这有效!只有1个打嗝。我的其他页面显示左侧边栏,但是一旦我添加了这个:

// WooCommerce Fix - Redirects to page if product is equal to one
add_action( 'template_redirect',
'woocom_redirect_if_single_product_in_category', 10 ); function
woocom_redirect_if_single_product_in_category() {
    if ( is_product_category() ){
        $cat_name   =   sanitize_title( woocommerce_page_title( false ) );
        $args   =   array(
                "post_type"         => "product",
                "posts_per_page"    =>  -1,
                "product_cat"       => $cat_name
        );
        $posts  = new WP_Query( $args );
        if( count( $posts->posts ) == 1 ){
            $one_post_ID    =   $posts->posts;
            $ID =   $one_post_ID[0]->ID;
            wp_redirect( get_permalink( $ID ) );
        }
    } }

它使我的模板显示一个破坏的侧边栏被推入页脚,而其他单个产品页面正确显示。脚本中可能存在一个错误配置侧边栏位置的调用,它可能调用默认的单一产品页面模板。如果有人对此有所修正,那将非常感激,因为它有点超出我的能力。