Пользовательские короткие коды WooCommerce

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

Существует стандартный короткий код:

[featured_products per_page="12" columns="4" orderby="date" order="desc"] 

Я хочу добавить catagory к этому, поэтому новый shortcode будет:

 [featured_category_products category="13" per_page="4" columns="4" orderby="date" order="desc"] 

Чтобы заставить его работать, для его создания необходимо создать функцию, поэтому я нашел файл class-wc-shortcodes.php со всеми штрих-кодами по умолчанию.

Я добавляю новую функцию, основанную на стандартном продукте:

 public function featured_category_products( $atts ) { global $woocommerce_loop; extract(shortcode_atts(array( 'category' => '', 'per_page' => '4', 'columns' => '4', 'orderby' => 'date', 'order' => 'desc' ), $atts)); $args = array( 'post_type' => 'product', 'post_status' => 'publish', 'ignore_sticky_posts' => 1, 'posts_per_page' => $per_page, 'orderby' => $orderby, 'order' => $order, 'meta_query' => array( array( 'key' => '_visibility', 'value' => array('catalog', 'visible'), 'compare' => 'IN' ), array( 'key' => '_featured', 'value' => 'yes' ) ), 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'terms' => array( esc_attr($category) ), 'field' => 'slug', 'operator' => 'IN' ) ) ); ob_start(); $products = new WP_Query( $args ); $woocommerce_loop['columns'] = $columns; if ( $products->have_posts() ) : ?> <?php woocommerce_product_loop_start(); ?> <?php while ( $products->have_posts() ) : $products->the_post(); ?> <?php woocommerce_get_template_part( 'content', 'product' ); ?> <?php endwhile; // end of the loop. ?> <?php woocommerce_product_loop_end(); ?> <?php endif; wp_reset_postdata(); return '<div class="woocommerce">' . ob_get_clean() . '</div>'; } 

Я добавил выделение переменной категории (и проверял, если она сработала) и добавлена ​​часть налогового запроса (найдена из другой функции, показывающей продукт по категориям). Поэтому я думал, что это должно сработать, но, конечно же, нет. Я не получаю никаких результатов и ошибок.

Кто-нибудь знает, как заставить это работать?

Если вы ищете только одну категорию продукта, используйте 'terms' => $category . Или вы можете сделать explode() для разделения строки, разделенной запятыми, на массив.

См. Wp Query: таксономические параметры .


Другие примечания:

Не трогайте файлы плагинов, ваши изменения будут потеряны при следующем обновлении.

  • Создайте свой собственный плагин .

  • Скопируйте созданную вами функцию.

  • Зарегистрируйте короткий код, чтобы сделать его доступным (используя вашу настраиваемую функцию как обратный вызов):

     add_shortcode( 'featured_category_product', 'featured_category_product_function' );