Woocommerce Continue Shopping Button Link to Last Product Category Page

纵饮孤独 提交于 2021-01-29 05:06:08

问题


There are forum topics regarding custom continue shopping buttons, but there is nothing on how to link the custom button to the last product category page viewed. There is a plugin that gives the option for this; however, there is a flaw in that when the cart is refreshed, the button disappears. The following code works to create a custom message/button; however, I cannot figure out how to change the link from the shop page to the last product category page viewed:

/* Add Continue Shopping Button on Cart Page & Checkout page*/
add_action( 'woocommerce_before_cart_table', 
'woo_add_continue_shopping_button_to_cart' );
add_action( 'woocommerce_before_checkout_form', 
'woo_add_continue_shopping_button_to_cart' );

function woo_add_continue_shopping_button_to_cart() {
$shop_page_url = "get_permalink( wc_get_page_id( 'shop' ) )";

echo '<div class="woocommerce-message">';
echo ' <a href="'.$shop_page_url.'" class="button wc-forwards">Continue 
Shopping →</a> Would you like some more prints?';
echo '</div>';
}

Thank you in advance! J.

Here is the code that the plugin uses to link (I think):

add_action( 'woocommerce_cart_is_empty', 'hpy_cs_output_notice', 1 );
function hpy_cs_output_notice() {

$display_empty = get_option( 'hpy_cs_empty_cart_notice' );

if ( $display_empty == 'yes' ) {
    $link = wc_custom_redirect_continue_shopping();

    $message = sprintf('<a href="%s" class="button wc-forward">%s</a> %s', 
esc_url($link), esc_html__('Continue shopping', 'woocommerce'), 
esc_html(get_option('hpy_cs_empty_cart_text', __('Your cart is empty.', '    
$message = sprintf( \'<a href="%s" class="button wc-forward">%s</a> %s\', 
esc_url( $link ), esc_html__( \'Continue shopping\', \'woocommerce\' ), 
esc_html( get_option( \'hpy_cs_empty_cart_text\', __( \'Your cart is 
empty.\', \'hpy_cshpy_cshpy_cs\' ) ) ) );
'))));

    wc_print_notice($message);
}

}

回答1:


There is no built-in function to retrieve last category page viewed. But, I have some ideas on how this could be solved.

First is to create a custom action, check if page is category page, and set category ID to session data if so. Then on your button, use this to get proper URL.

/* Set up session */
add_action( 'init', 'wp_check_for_product_cat_sess');
function wp_check_for_product_cat_sess(){
    if(!session_id()) {
        session_start();
    }
}

/* Set session variable when on Category or Product page */
add_action( 'wp', 'wp_check_for_product_cat');
function wp_check_for_product_cat(){
        global $wp_query;
        if( is_product_category() ){ // This is Category; use my ID
                $_SESSION['wp_last_cat'] = $wp_query->get_queried_object()->term_id;
        }
        if( is_product() ){ // This is Product; use my ID to get my Categories
                $cats = get_the_terms( $wp_query->get_queried_object(), 'product_cat' ) ;
                if( count( $cats ) > 0 ){
                        foreach($cats as $one_cat ){
                                $_SESSION['wp_last_cat'] = $one_cat->term_id;
                        }
                }
        }

        if( is_cart() ){
                // Here we output only on Cart page, as debug tool */
                var_dump( $_SESSION['wp_last_cat'] );
        }
}

Then you replace in your action code:

$shop_page_url = "get_permalink( wc_get_page_id( 'shop' ) )";

Should become:

if( isset( $_SESSION['wp_last_cat'] ) ){
    $shop_page_url = get_term_link( $_SESSION['wp_last_cat'], 'product_cat' );
} else {
    $shop_page_url = get_permalink( wc_get_page_id( 'shop' ) );
}

Second is to retrieve last item added to cart, and use that item to retrieve its category URL.



来源:https://stackoverflow.com/questions/51332983/woocommerce-continue-shopping-button-link-to-last-product-category-page

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!