Скрыть кнопку «Добавить в корзину» на основе настраиваемого поля продукта и категории продукта в WooCommerce - PullRequest
0 голосов
/ 23 февраля 2019

Я хотел бы добавить пользовательский флажок на страницу продукта woocommerce, которая скрывает кнопку «Добавить в корзину» в передней части.Я не хочу полностью исключать возможность покупки предмета (все равно хотел бы использовать прямое добавление в корзину для добавления товара в корзину и покупки), поэтому я не хочу использовать add_filter('woocommerce_is_purchasable', 'my_woocommerce_is_purchasable', 10, 2);или аналогичные.

В настоящий момент я достиг:

Добавление пользовательского флажка

// Display Checkbox
add_action('woocommerce_product_options_general_product_data', 'product_custom_fields_add');
function product_custom_fields_add(){
    global $post;

    echo '<div class="product_custom_field">';

    // Custom Product Checkbox Field
    woocommerce_wp_checkbox( array(
        'id'        => '_no_addcart_product',
        'desc'      => __('show or hide add to cart', 'woocommerce'),
        'label'     => __('Hide Add To Cart', 'woocommerce'),
        'desc_tip'  => 'true'
    ));

    echo '</div>';
}

// Save Checkbox
add_action('woocommerce_process_product_meta', 'product_custom_fields_save');
function product_custom_fields_save($post_id){
    // Custom Product Text Field
    $no_addcart_product = isset( $_POST['_no_addcart_product'] ) ? 'yes' : 'no';
        update_post_meta($post_id, '_no_addcart_product', esc_attr( $no_addcart_product ));
}

, а также кнопки «Скрыть в корзину» в зависимости от фрагмента категории.

function remove_product_description_add_cart_button(){
    global $product;      
    $category = 'hide';        
    if ( has_term( $category, 'product_cat', $product->id ) )
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

add_action('wp','remove_product_description_add_cart_button');

Оба вышеперечисленных прекрасно работают самостоятельно.Я терплю неудачу, пытаясь объединить их, просто чтобы удалить кнопку «Добавить в корзину», если флажок активен (мне также не требуется проверять категорию).Я собрал код ниже, надеясь, что он будет работать, но это не так.

function remove_product_description_add_cart_button() {
    if ( is_product() && get_post_meta( $post->ID, '_no_addcart_product', true ) == 'yes' ) {
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

add_action('wp','remove_product_description_add_cart_button');

Большое спасибо заранее за любую помощь в правильном направлении.

1 Ответ

0 голосов
/ 23 февраля 2019

Вы можете комбинировать оба условия с реляционным аргументом OR следующим образом:

add_action( 'woocommerce_single_product_summary', 'remove_product_add_to_cart_button', 4 );
function remove_product_add_to_cart_button(){
    global $product;

    $term_slug = 'hide'; // Product category term slug

    if ( has_term( $term_slug, 'product_cat', $product->get_id() ) || $product->get_meta('_no_addcart_product') === 'yes' )
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы).Это должно работать.

Примечание: Начиная с Woocommerce 3, свойства WC_Product не могут быть доступны напрямую, поэтому вам нужно использовать доступные методы с WC_Product Object $product.

  • Для идентификатора продукта вы будете использовать get_id() метод, например: $product->get_id()
  • Для пользовательских метаданных продукта вы также можете использовать get_meta() метод
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...