WooCommerceLoopのチェックアウトにリダイレクトする追加の[カートに追加]ボタン

Aug 18 2020

WooCommerceアーカイブに、商品をカートに追加し、顧客をチェックアウトにリダイレクトするボタンが必要です。私はそれを「購入してチェックアウト」と呼んでいます。

woocommerce_after_shop_loop_itemアクションを使用してアーカイブにフックし、global $product;引数を定義しました。

次に、商品IDを取得し、カートへの追加URL(atc_url引数)を定義します。問題は、カートに追加をクリックしても、商品が追加されないことです。

これはこれまでの私のコードであり、ここで何が問題なのかよくわかりません。

add_action( 'woocommerce_after_shop_loop_item', 'buy_checkout_on_archive', 20 );
function buy_checkout_on_archive(){

    global $product;

    $pid = $product->get_id();

    $atc_url = wc_get_checkout_url().'?add-to-cart='.$pid;

    $button_class = 'loop-checkout-btn'; $button_text = __('Buy & Checkout', 'woocommerce');

        if ($product->is_type('simple')){ echo '<a href="'.$atc_url.'" class="'.$button_class.'">'.$button_text.'</a>';
    }
}

回答

LoicTheAztec Aug 18 2020 at 17:57

以下は、製品をカートに追加した後にチェックアウトにリダイレクトするカスタムのカートに追加ボタンをWooCommerceアーカイブに追加することでうまくいきます。

add_action( 'woocommerce_after_shop_loop_item', 'buy_checkout_on_archive', 20 );
function buy_checkout_on_archive(){
    global $product; if ( $product->is_type('simple') ){
        $product_id = $product->get_id();
        $button_url = '?addtocart='.$product_id;
        $button_class = 'button loop-checkout-btn'; $button_text  = __('Buy &amp; Checkout', 'woocommerce');

        echo '<a href="'.$button_url.'" class="'.$button_class.'">'.$button_text.'</a>'; } } add_action( 'template_redirect', 'addtocart_on_archives_redirect_checkout' ); function addtocart_on_archives_redirect_checkout(){ if( isset( $_GET['addtocart'] ) && $_GET['addtocart'] > 0 ) { WC()->cart->add_to_cart( intval($_GET['addtocart']) );

        // Checkout redirection
        wp_safe_redirect( wc_get_checkout_url() );
        exit;
    }
}

コードは、アクティブな子テーマ(またはアクティブなテーマ)のfunctions.phpファイルに入ります。テストされ、動作します。