Các sản phẩm không thể mua được có nút Gọi để đặt hàng trong WooCommerce

Trong một dự án tùy chỉnh Genesis gần đây mà tôi đã hoàn thành, yêu cầu là có thể đánh dấu các sản phẩm cụ thể là “Chưa (chưa) có sẵn để bán” khi thêm / chỉnh sửa sản phẩm.

Ngoài ra, các nút “Thêm vào giỏ hàng” tiêu chuẩn trên kho lưu trữ sản phẩm như trang Cửa hàng chính sẽ hiển thị văn bản “Gọi để đặt hàng” tùy chỉnh và các trang sản phẩm đơn lẻ sẽ hiển thị thông báo tùy chỉnh dọc theo dòng “Để đặt hàng sản phẩm này, hãy cung cấp cho chúng tôi một cuộc gọi vào số này và số khác ”.

Trong hướng dẫn này, tôi chia sẻ chi tiết về cách thiết lập ở trên trong WooCommerce.

Tất cả mã bên dưới đều nằm trong functions.php của chủ đề con .

Bước 1

Thêm trường (hộp kiểm) trong tab Chung của dữ liệu sản phẩm.Not Ready to Sell

add_action( 'woocommerce_product_options_general_product_data', 'custom_general_product_data_custom_fields' );
/**
 * Add `Not Ready to Sell` field in the Product data's General tab.
 */
function custom_general_product_data_custom_fields() {
    // Checkbox.
    woocommerce_wp_checkbox(
        array(
            'id'            => '_not_ready_to_sell',
            'wrapper_class' => 'show_if_simple',
            'label'         => __( 'Not Ready to Sell', 'woocommerce' ),
            'description'   => __( '', 'woocommerce' )
            )
    );
}

Bước 2

Lưu trạng thái của hộp kiểm bằng cách cập nhật giá trị của _not_ready_to_sell khóa meta (trường tùy chỉnh) khi sản phẩm được lưu / cập nhật.

add_action( 'woocommerce_process_product_meta', 'custom_save_general_proddata_custom_fields' );
/**
 * Save the data values from the custom fields.
 * @param  int $post_id ID of the current product.
 */
function custom_save_general_proddata_custom_fields( $post_id ) {
    // Checkbox.
    $woocommerce_checkbox = isset( $_POST['_not_ready_to_sell'] ) ? 'yes' : 'no';
    update_post_meta( $post_id, '_not_ready_to_sell', $woocommerce_checkbox );
}

Bước 3

Đánh dấu các sản phẩm “Chưa sẵn sàng để bán” là không thể mua được.

add_filter( 'woocommerce_is_purchasable', 'custom_woocommerce_set_purchasable' );
/**
 * Mark "Not ready to sell" products as not purchasable.
 */
function custom_woocommerce_set_purchasable() {
    $not_ready_to_sell = get_post_meta( get_the_ID(), '_not_ready_to_sell', true );

    return ( 'yes' === $not_ready_to_sell ? false : true );
}

Bước 4

Điều này sẽ thay đổi văn bản của các ‘nút’ sản phẩm không thể mua được (trên kho lưu trữ WooCommerce) thành .Read more

Để thay đổi văn bản của nút thành , hãy thêmCall to Order

add_filter( 'woocommerce_product_add_to_cart_text', 'custom_product_add_to_cart_text' );
/**
 * Change "Read More" button text for non-purchasable products.
 */
function custom_product_add_to_cart_text() {
    $not_ready_to_sell = get_post_meta( get_the_ID(), '_not_ready_to_sell', true );

    if ( 'yes' === $not_ready_to_sell ) {
        return __( 'Call to Order', 'woocommerce' );
    } else {
        return __( 'Add to cart', 'woocommerce' );
    }
}

Bước 5

Thêm hướng dẫn cho các sản phẩm không thể mua được trên các trang sản phẩm đơn lẻ.

add_action( 'woocommerce_single_product_summary', 'custom_woocommerce_call_to_order_text', 30 );
/**
 * Add calling instructions for non-purchasable products.
 */
function custom_woocommerce_call_to_order_text() {
    $not_ready_to_sell = get_post_meta( get_the_ID(), '_not_ready_to_sell', true );

    if ( 'yes' === $not_ready_to_sell ) {
        echo '<p class="content-box-blue">Call to order this product. <strong>123-456-7890</strong>.</p>';
    }

}