我尝试跳过类别存档页面,并在该类别中只有一个产品时直接转到单个产品页面。
这是我到目前为止的代码,(不工作):
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中的单一搜索重定向为模型:
谢谢!
答案 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 ) );
}
} }
它使我的模板显示一个破坏的侧边栏被推入页脚,而其他单个产品页面正确显示。脚本中可能存在一个错误配置侧边栏位置的调用,它可能调用默认的单一产品页面模板。如果有人对此有所修正,那将非常感激,因为它有点超出我的能力。