2016-05-21 12 views
1

カテゴリに1つの製品しかない場合、カテゴリアーカイブページをスキップして、単一の製品ページにまっすぐ進みます。ここでWoocommerce:カテゴリーページに1つの商品しかない場合、どの商品を1つの商品に自動的にリダイレクトするのですか?

は、私がこれまで持っているコード、(動作していない)である。

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

感謝を!

答えて

2

私はではなく、具体的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

特に、WooCommereceは、この条件を製品カテゴリのための 'is_product_category()'と製品タグのための 'is_product_tag()'を一緒に使用します: 'if((is_product_category()|| is_product_tag())&& $ wp_query-> post_count == 1 ){... ' – LoicTheAztec

+1

ありがとう、それは動作します!あなたの条件を含めるように答えを編集する。 – AJD

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)); 
     } 
    } 
} 
+0

こんにちは、あなたのコードはすべてのカテゴリのページを単一の製品ページにリダイレクトしました。 – AJD

+0

@AJD更新されました。今すぐご確認ください! –

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)); 
     } 
    } } 

をそれは私のテンプレートが壊れたサイドバーを表示し作られた他の単一の製品ページが正しく表示されている間、フッターに押し込まれます。おそらく、サイドバーの位置が誤って設定されているというスクリプトの呼び出しがあります。おそらくデフォルトの単一の製品ページテンプレートが呼び出されています。誰かがこれを修正してくれれば、それは私の能力をはるかに超えているので、非常に感謝しています。

+0

私は受け入れられた回答のバージョンを試してみることをお勧めします。あなたが使っているものが正しく働いたかどうかはわかりません。 – AJD

+0

うん、私はそれを試してみましたが、問題は機能していないPHPタグが製品ファイル全体の中身と余分なdivをラップしていた問題でした。 \ _( '_')_ /最初の答えを+1しました。 – rtj113