2017-01-30 3 views
1

Ich habe einen WooCommerce Laden, wo ich mag zeige eine vorgestellten Bild & Überschrift eines der folgenden (in der Reihenfolge) effizienten Rückfall schreiben:Wie für leeren wp_query in Wordpress

  1. Sonderprodukt
  2. wenn kein gekennzeichnetes Produkt, dann klebrig Post
  3. wenn keine klebrige Post, dann neuester Beitrag

Aber ich mag auch effizienten Code schreiben. Wie kann ich dies vereinfachen und redundantes PHP und HTML entfernen?

/* START FEATURED PRODUCT QUERY */ 
$args = array(
    'posts_per_page' => 1, 
    'post_type' => 'product', 
    'meta_query' => array(
     'key' => '_featured', 
     'value' => 'yes' 
     ), 
$query = new WP_Query($args); 

if($query->have_posts()) { 
    while($query->have_posts()) { 
      $query->the_post(); ?> 

      <a href="<?php the_permalink(); ?>" id="featured-blog-post">  
       <?php the_post_thumbnail('full'); 
      the_title('<h2>', '<span>&raquo;</span></h2>'); 
      the_excerpt(); ?> 
      </a> <?php 
    } // end while 
    wp_reset_postdata();   
} else { 

/* START FALLBACK POST QUERY */ 
$args = array(
    'posts_per_page' => 1, 
    'post__in' => get_option('sticky_posts'), 
    'ignore_sticky_posts' => 1 
    ); 

$query = new WP_Query($args); 

    while($query->have_posts()) { 
      $query->the_post(); ?> 

      <a href="<?php the_permalink(); ?>" id="featured-blog-post">  
       <?php the_post_thumbnail('full'); 
      the_title('<h2>', '<span>&raquo;</span></h2>'); 
      the_excerpt(); ?> 
      </a> <?php 
    } // end while 
    wp_reset_postdata(); 
}  

Der zweite WP_Query hat genau die gleiche HTML-Ausgabe, nur anders $args

Antwort

0

Ich bin eine ähnliche Abfrage schreiben, und ich bin nicht sicher, dass Sie die Abfrage viel effizienter in Wordpress, als Sie bereits machen können haben. Das einzige, was ich anders gemacht habe, war, die Ausgabe der Posts so zu gestalten, dass sie den gleichen Code aufruft. Dies macht es einfacher zu aktualisieren.

Da Sie nur ein Meta-Feld in der ersten Abfrage abfragen, wechselte ich zu einer einfachen benutzerdefinierten Feldabfrage.

// Function to output posts 
function output_posts($query){ 

    while($query->have_posts()) { 
     $query->the_post(); 

     echo '<a href="' . get_permalink() '" id="featured-blog-post">';  
      the_post_thumbnail('full'); 
      the_title('<h2>', '<span>&raquo;</span></h2>'); 
      the_excerpt(); 
     echo '</a>'; 
    } 

    wp_reset_postdata();  
} 

// Featured query 
$args = array(
    'posts_per_page' => 1, 
    'post_type'  => 'product', 
    'meta_key'  => '_featured', 
    'meta_value'  => 'yes', 
); 

$featured = new WP_Query($args); 

// If featured has posts 
if($featured->have_posts()) { 
    // Output 
    output_posts($featured);  

// Else fallback  
} else { 

    // Fallback query 
    $args = array(
     'posts_per_page'  => 1, 
     'post__in'   => get_option('sticky_posts'), 
     'ignore_sticky_posts' => 1, 
    ); 

    $fallback = new WP_Query($args); 

    // If fallback has posts 
    if ($fallback->have_posts()){ 
     // Output 
     output_posts($fallback);  

    } 
} 
Verwandte Themen