Показать страницы продукта WooCommerce только для определенной категории - PullRequest
0 голосов
/ 27 декабря 2018

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

Я использовал этот код в прошлом, чтобы скрыть все страницы продукта., но мне нужно отфильтровать по категориям.Любые подсказки?

//Remove all single product pages
function hide_product_page($args){
    $args["publicly_queryable"]=false;
    $args["public"]=false;
    return $args;
}
add_filter( 'woocommerce_register_post_type_product','hide_product_page',12,1); 

РЕДАКТИРОВАТЬ: Вот фон: образцы продуктов продаж являются бесплатными, и у нас есть одна страница заказа для тех, которые доступны по паролю (не отдельные страницы продукта.) Даже если страницы категорийне были показаны, отдельные страницы продукта по-прежнему существуют.Некоторые случайные люди нашли эти страницы и разместили заказы на «бесплатный» продукт.Я должен предотвратить это, поэтому недостаточно просто «спрятать» отдельные страницы продукта, я должен убедиться, что они не существуют.Однако нам все еще нужны страницы продуктов для обычных продуктов, которые продаются для широкой публики.

РЕДАКТИРОВАТЬ: я в конечном итоге использовал это в моих функциях. Php:

function custom_shop_page_redirect(){
    if (class_exists('WooCommerce')){
        if(is_product()){
            global $post;
            $price = get_post_meta( $post->ID, '_regular_price', true);

            if($price == 0) {
                wp_redirect(home_url());
                exit();
            }
        }
    } 
    return;
} 
add_action('template_redirect','custom_shop_page_redirect');

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

1 Ответ

0 голосов
/ 27 декабря 2018

Предположим, у вас есть категория с слагом вроде pizza.Вы можете скрыть товары в этой категории и , чтобы эта категория не отображалась на странице магазина (если вы включили показ категорий перед продуктами) в WooCommerce, как это.(Включите это где-нибудь в свою дочернюю тему или в funtion.php вашей темы.)

$CATEGORY_SLUGS = array('pizza'); // Can contain multiple slugs.

// Prevents category from showing up.
function get_terms_exclude_by_category_slug($terms, $taxonomies, $args) {
  global $CATEGORY_SLUGS;
  if (in_array('product_cat', $taxonomies)
      && !is_admin()
      && is_shop()) {
    $new_terms = array();
    foreach ($terms as $key => $term) {
      if (!in_array($term->slug, $CATEGORY_SLUGS)) {
        $new_terms[] = $term;
      }
    }
    $terms = $new_terms;
  }
  return $terms;
}

// Prevents products in certain categories from showing up.
function exclude_products_by_category_slug($q) {
  global $CATEGORY_SLUGS;
  $tax_query = (array) $q->get('tax_query');
  $tax_query[] = array(
    'taxonomy' => 'product_cat',
    'field' => 'slug',
    'terms' => $CATEGORY_SLUGS,
    'operator' => 'NOT IN'
  );
  $q->set('tax_query', $tax_query);
}

// The last two parameters are needed only because the callback
// receives 3 arguments instead of the default 1.
add_filter('get_terms', 'get_terms_exclude_by_category_slug', 10, 3);
add_action('woocommerce_product_query', 'exclude_products_by_category_slug');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...