Кнопка «Добавить в корзину» в архивах магазинов в зависимости от состояния пользовательского флажка администратора - PullRequest
0 голосов
/ 25 февраля 2019

Я создал пользовательский флажок для продукта администратора, и если этот флажок активен, я хотел бы заменить кнопку «Добавить в корзину» для этих продуктов на любой странице архива / категории магазина на «Просмотреть продукт», и кнопка должна принятьзритель на странице продукта.

Другие элементы магазина, у которых флажок не активен, должны вести себя нормально и отображать кнопку «Добавить в корзину» с сохранением их функциональности.

У меня есть флажок, работающий на стороне администратора без проблем со следующим кодом:

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

Я пришел с этим кодом ниже, чтобы попытаться добавить условие if на основестатус флажка.

add_filter( 'woocommerce_loop_add_to_cart_link', 'replacing_add_to_cart_button', 10, 2 );
function replacing_add_to_cart_button( $button, $product  ) {
   if (  $product->get_meta('_no_addcart_product') === 'yes' )
   $button_text = __("View product", "woocommerce");
   $button = '<a class="button" href="'. $product->get_permalink().'">' . $button_text.'</a>';
   return $button;
}

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

Empty Buttons

У меня естьПрочитайте множество тем, которые глобально меняют кнопку для всех продуктов, но не смогли найти никакой условной логики, применяемой только к определенным продуктам, которая могла бы помочь мне разобраться в этом.Так что любая помощь будет принята с благодарностью.Большое спасибо заранее.

1 Ответ

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

Обновлено

Проблема в вашем последнем функциональном коде связана с вашим IF оператором, который нуждается в скобках :

add_filter( 'woocommerce_loop_add_to_cart_link', 'replacing_add_to_cart_button', 10, 2 );
function replacing_add_to_cart_button( $button, $product ) {
    if (  $product->get_meta('_no_addcart_product') === 'yes' ) {
        $button_text = __("View product", "woocommerce");
        $button = '<a class="button" href="'. $product->get_permalink().'">' . $button_text.'</a>';
    }
    return $button;
}

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

...