2

Я пытаюсь использовать таксономию категории Woocommerce для отображения соответствующих продуктов на странице. Тип настраиваемого сообщения позволяет мне добавить список категорий продуктов на пользовательскую страницу, но я не уверен, как отфильтровать его, чтобы отображать только ту категорию, которую я выбрал для соответствующей страницы. На данный момент он показывает все свои продукты, не фильтруются те, которые мне нужны:Продукты WooCommerce в Custom Post Type

$args = array('post_type' => 'product', 'posts_per_page' => -1, 'taxonomy' => 'product_cat'); 

$loop = new WP_Query($args); 

while ($loop->have_posts()) : $loop->the_post(); 
    global $product; 
    echo '<div class="background-img"><a href="'.get_permalink().'">' . woocommerce_get_product_thumbnail().'<br /> '.get_the_title().'</a>'; 
    echo $product->get_price_html(); 
    echo '<form class="cart" method="post" enctype="multipart/form-data"> 
    <input type="hidden" name="add-to-cart" value="'; 
    echo esc_attr($product->id); 
    echo '"> 
    <button type="submit">'; 
    echo $product->single_add_to_cart_text(); 
    echo '</button> 
     </form>'; 
    echo '</div>'; 
endwhile; 

$attachment_ids = $product->get_gallery_attachment_ids(); 

foreach($attachment_ids as $attachment_id) 
{ 
    echo $image_link = wp_get_attachment_url($attachment_id); 

} 
wp_reset_query(); 

Вот версия сайта разработчика, это все еще довольно сырой и нуждается много стайлинга, но должно дать представление:

http://betamarine.mainboard.com/engine/beta-14-z482/

Я использую следующий плагин:

https://wordpress.org/plugins/custom-post-type-ui/

я могу создать пользовательские tĀ xonomy, но это дополнительный шаг и дает те же результаты. Я думаю, что я могу пропустить что-то маленькое, но я просто не понимаю.

ответ

1

Таким образом, после тяжелой борьбы вот фрагмент кода:

<?php 
 

 
    //retrieves the term variable from the admin page - replace "product_category" with the name of your post type 
 
$part_terms = get_the_terms($post->ID, 'product_category'); 
 
if($part_terms && !is_wp_error($part_terms)) { 
 
    foreach($part_terms as $term) { 
 
    } 
 
} 
 
//create a variable to filter your Wordpress Loop 
 
    $part_args = array( 
 
\t \t 'post_type' => 'product', 
 
\t \t 'hierarchical' => true, 
 
\t \t 'posts_per_page' => -1, 
 
\t \t 'tax_query' => array(array(
 
\t \t \t 'taxonomy' => 'product_category', 
 
\t \t \t 'field' => 'slug', 
 
\t \t \t 'terms' => array($term->slug), 
 
\t \t \t 'operator' => 'IN' 
 
\t \t \t)) 
 
\t); 
 

 
\t \t \t \t \t \t \t 
 
    $loop = new WP_Query($part_args); 
 
//the loop 
 
    while ($loop->have_posts()) : $loop->the_post(); 
 
    global $product; 
 
//some handy woocommerce coding 
 
\t echo '<div class="background-img"><a href="'.get_permalink().'">' . woocommerce_get_product_thumbnail().'<br /> '.get_the_title().'</a>'; 
 
\t echo $product->get_price_html(); 
 
\t echo '<form class="cart" method="post" enctype="multipart/form-data"> 
 
    <input type="hidden" name="add-to-cart" value="'; 
 
\t echo esc_attr($product->id); 
 
\t echo '"> 
 
    <button type="submit">'; 
 
\t echo $product->single_add_to_cart_text(); 
 
\t echo '</button> 
 
\t \t </form>'; 
 
\t echo '</div>'; 
 
     \t endwhile; 
 

 
?>

Благодаря Jaydeep для установки меня на правильном пути!

1

Для использования фильтра texonomy необходимо использовать tax_query.

Проверить эту ссылку: https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

+0

Спасибо за ответ, прочитав Codex и пришел с этим: '$ арг = массив ( \t 'post_type' => 'продукт', \t 'posts_per_page' => -1, \t ' налог-запрос»=> Array (массив ( \t \t \t 'систематика' => 'product_cat', \t \t \t 'поле' => 'тихоход', \t \t \t 'термины' => массив ($ кошка- > slug), \t \t \t «оператор» => «В» \t \t \t)) \t \t); ' он ничего не делает, хотя, по-прежнему просто показывает все продукты, не очень хорошо на PHP - это я на правильном пути ? –

+0

Да, вы на правильном пути, вы можете изменить: «tax-query» => array (array ('taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => array ($ cat -> slug), 'operator' => 'IN')) в соответствии с вашим требованием. например. оператор поддержки «IN», «=», «LIKE», «>», «<» и т. д. –

+0

О, мое слово, только что понял, что я использовал «налоговый запрос» вместо «tax_query» - с подчеркиванием! При этом, если я добавлю имя термина (например, «двигатель») в место массива ($ category-> slug), он будет работать, если я добавлю, что вызов переменной ничего не показывает. Я подозреваю, что это может вызвать что-то еще на странице? –