Отключить ссылки для определенной категории продуктов в магазине Woocommerce

Как я могу отключить ссылку на страницу одного продукта woocommerce для определенной категории?

Я имею в виду, что хочу отключить возможность открытия отдельной страницы продукта для определенной категории, а не для всех категорий. Итак, есть несколько категорий, которые мне нужны для нормальной работы с одной страницей.

Чтобы уточнить: я хочу, чтобы в этой категории отображались фото и название продукта и отключалось при попытке щелкнуть, чтобы открыть страницу продукта.


person Mohamed Ameen    schedule 15.05.2018    source источник


Ответы (1)


Для определенной категории продуктов (или категорий продуктов) следующий код:

  • Удалить ссылку на товар
  • Убрать кнопку под фото товара

в магазине и на страницах архива.

Вам нужно будет определить в обеих функциях вашу целевую категорию продукта (или категории продуктов):

add_action( 'init', 'custom_shop_loop_items' );
function custom_shop_loop_items() {
    remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
    add_action( 'woocommerce_before_shop_loop_item', 'custom_template_loop_product_link_open', 10 );
}

// Removing the product link
function custom_template_loop_product_link_open() {
    global $product;

    // HERE define your product categories in the array (can be either IDs, slugs or names)
    $terms =  array( 't-shirts', 'hoods' ); // Coma separated

    $link = apply_filters( 'woocommerce_loop_product_link', get_the_permalink(), $product );

    if( has_term( $terms, 'product_cat', $product->get_id() ) )
        echo '<a class="woocommerce-LoopProduct-link woocommerce-loop-product__link">';
    else
        echo '<a href="' . esc_url( $link ) . '" class="woocommerce-LoopProduct-link woocommerce-loop-product__link">';
}

// Removing the product button
add_filter( 'woocommerce_loop_add_to_cart_link', 'filter_loop_add_to_cart_link', 20, 3 );
function filter_loop_add_to_cart_link( $button, $product, $args = array() ) {

    // HERE define your product categories in the array (can be either IDs, slugs or names)
    $terms =  array( 't-shirts', 'hoods' ); // Coma separated

    if( has_term( $terms, 'product_cat', $product->get_id() ) )
        $button = '';

    return $button;
}

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

person LoicTheAztec    schedule 15.05.2018
comment
Спасибо, Лоик, за то, что поделился. Он отлично работает при удалении кнопки продукта. Но он по-прежнему интерактивен и открывает продукт на одной странице. Как я могу это решить. - person Mohamed Ameen; 16.05.2018
comment
@Mohamed Извините, но этот код предназначен для страниц магазинов и архивов ... Он полностью удаляет все ссылки и кнопки для связанных продуктов, которые относятся только к целевым категориям продуктов. Так что я не понимаю, в чем проблема. Это проверено и работает. Если нет, это потому, что в вашей теме или плагине есть изменения горничной, и в этом случае я не могу этого догадаться. - person LoicTheAztec; 16.05.2018