WordPress

pętla — WordPress z niestandardowym zapytaniem woocommerce

  • 12 października, 2016
  • 4 min read
pętla — WordPress z niestandardowym zapytaniem woocommerce


Jestem nowy w wp dev i próbuję dowiedzieć się, jak zastąpić lub zmienić zapytanie woocommerce, które pokazuje wszystkie moje produkty na dowolnej stronie archiwum lub stronie, która pokazuje moją listę produktów, nie wiem, jak się nazywa, ale strona, która pokazuje zdjęcie, nazwę, cenę i link do strony produktu. Mam wiele kategorii, więc myślę, że musiałbym dodać kod, aby wyświetlić różne kategorie w zależności od strony kota, na której się znajdują? Chyba, że ​​patrzę na to zbyt głęboko.

Próbuję stworzyć zaawansowaną pętlę, która pokazuje mi grupy produktów na podstawie kilku rzeczy. Najpierw chcę zobaczyć wszystkie polecane produkty, następnie chcę zobaczyć produkty, które nie są starsze niż 6 miesięcy, następnie wszystko inne w kolejności menu, a następnie w kolejności tytułów rosnąco.

Aby było to jeszcze bardziej skomplikowane, nie chcę żadnych duplikatów. Myślę, że mój kod działa, ale nie jestem pewien, gdzie i jak go umieścić, więc Woo startuje z nim i pokazuje moje wyniki. Poniżej znajduje się kod, którego używam, umieszczam go na stronie woocommerce.php w moim motywie potomnym i nic mi nie pokazuje, chyba że coś echo lub print_r. Więc wiem, że czegoś mi brakuje, ale będąc nowym, nie wiem, czego muszę szukać, aby uwzględnić, aby zobaczyć wyniki.

Warto przeczytać!  8 najlepszych narzędzi do optymalizacji treści online dla WordPress (w 2023 r.)

Mój kod: (woocommerce.php)

<?php

if ( is_shop() || is_product_category() || is_product_tag() ) { // Only run on shop archive pages, not single products or other pages
    // Products per page
    $per_page = 12;
    if ( get_query_var( 'taxonomy' ) ) { // If on a product taxonomy archive (category or tag)   

        //First loop 
      $args = array(
            'post_type' => 'product',
            'orderby'  => array( 'meta_value' => 'DESC' ),
            'meta_key' => '_featured',
            'posts_per_page' => $per_page,
            'paged' => get_query_var( 'paged' ),
        );    
      $loop = new WP_Query( $args );
      if (have_posts()) :        
          while ($loop->have_posts()) : $loop->the_post();    
              $post_id = get_the_ID();
              $do_not_duplicate[] = $post_id;
          endwhile;
      endif;
      rewind_posts();

      //Second loop    
      $args = array( 
          'post_type' => 'product',
          'orderby' => 'date',
          'order' => 'DESC',
          'date_query' => array(
          array(
              'before' => '6 months ago',
              ),
          ), 
            'post__not_in' => $do_not_duplicate
      );
      $loop = new WP_Query( $args );
      if (have_posts()) :        
          while ($loop->have_posts()) : $loop->the_post();    
              $post_id = get_the_ID();
              $do_not_duplicate[] = $post_id;
          endwhile;
      endif;
      rewind_posts();

      //Third loop 
      $args = array(
          'post_type' => 'product',
          'orderby'  => array( 
              'menu_order' => 'ASC', 
              'title' => 'ASC',
              'post__not_in' => $do_not_duplicate
          ), 

        );  

      $loop = new WP_Query( $args );
      if (have_posts()) :        
          while ($loop->have_posts()) : $loop->the_post();    
              $post_id = get_the_ID();
              $do_not_duplicate[] = $post_id;
          endwhile;
      endif;              

    } else { // On main shop page
        $args = array(
            'post_type' => 'product',
            'orderby' => 'date',
            'order' => 'DESC',
            'posts_per_page' => $per_page,
            'paged' => get_query_var( 'paged' ),
        ); 

    }

    // Set the query
    $products = new WP_Query( $args );

    // Standard loop
    if ( $products->have_posts() ) :
        while ( $products->have_posts() ) : $products->the_post();  
        endwhile;
        wp_reset_postdata();
    endif;

} else { // If not on archive page (cart, checkout, etc), do normal operations
    woocommerce_content(); 
}

Każda pomoc w nakierowaniu mnie we właściwym kierunku byłaby wielką pomocą!

Warto przeczytać!  wtyczki - Dodaj niestandardowe przyciski z niestandardowymi akcjami na ekranie Edytuj post w WordPress?

Aktualizacja

zapomniałem dodać 'post_type' => 'product'w moich argumentach (zaktualizowałem go właśnie teraz), ale teraz, gdy dodaję, widzę moje tytuły the_title(); w mojej pętli while, jak mam powiedzieć, żeby zamiast tego wypluł to wszystko, tak jak w przypadku dowolnej strony archiwum (wywołać szablon?), a także jak sprawić, by była bardziej ogólna, więc w zależności od kategorii/strony archiwum, na której się znajduję pokaże tylko produkty z tej kategorii? Dzięki jeszcze raz!


Źródło