wake-up-neo.com

Soll ich Pre Get Posts oder WP_Query verwenden?

Ich habe die folgende Abfrage, die ich in meiner taxonomy.php-Vorlage über query_brands_geo('dealers', 'publish', '1', $taxtype, $geo, $brands); aufrufe

Diese Funktion funktioniert einwandfrei. Nach dem Lesen des Codex für Abfrageposts wurden jedoch pre_get_posts als bevorzugte Methode zum Ändern der Standardabfrage angegeben. Wären die pre_get_posts effizienter als meine unten stehende wp_query-Funktion?

Wenn ja, wie würde ich die pre_get_posts konstruieren und meine Variable und Abfrage unten übergeben?

function my_custom_query($posttype, $poststatus, $paidvalue, $taxtype, $geo, $brands) {
   global $wp_query; 
   $wp_query = new WP_Query();
   $args = array( 
      'post_type' => $posttype, 
      'post_status' => array($poststatus), 
      'orderby' => 'Rand', 
      'posts_per_page' => 30, 
      'meta_query' => array( 
         array( 
            'key' => 'wpcf-paid', 
            'value' => array($paidvalue), 
            'compare' => 'IN', 
            ) 
      ), 
      'tax_query' => array( 
         'relation' => 'AND', 
         array( 
            'taxonomy' => $taxtype, 
            'field' => 'slug', 
            'terms' => $geo 
         ), 
         array( 
            'taxonomy' => 'brands', 
            'field' => 'slug', 
            'terms' => $brands 
         ) 
      ) 
   ); 

   return $wp_query->query($args); 
} 
29
user1609391

pre_get_posts führt dieselbe Abfrage aus, sodass beide dieselbe Zeit benötigen. Wenn Sie jedoch die Aktion pre_get_posts verwenden, speichern Sie eine oder mehrere SQL-Abfragen. Im Moment führt WordPress eine Standardabfrage aus und Sie führen Ihre Abfrage mit dieser Funktion aus, die die Ergebnisse der Standardabfrage ersetzt (die Standardabfrage hat keine Verwendung). Nachstehend erfahren Sie, wie Sie Ihren $args verschieben können

function custom_pre_get_posts($query, $posttype='dealers', $poststatus='publish', $paidvalue='1', $taxtype='any_default_value', $geo='any_default_value', $brands='any_default_value') {

    // filter your request here.
    if($query->is_category) {

        $args = array(
            'post_type' => $posttype,
            'post_status' => array($poststatus),
            'orderby' => 'Rand',
            'posts_per_page' => 30,
            'meta_query' => array(
                array(
                    'key' => 'wpcf-paid',
                    'value' => array($paidvalue),
                    'compare' => 'IN',
                )
            ),
            'tax_query' => array(
                'relation' => 'AND',
                array(
                    'taxonomy' => $taxtype,
                    'field' => 'slug',
                    'terms' => $geo
                ),
                array(
                    'taxonomy' => 'brands',
                    'field' => 'slug',
                    'terms' => $brands
                )
            )
        );
        $query->query_vars = $args;
    }
}
add_action('pre_get_posts', 'custom_pre_get_posts');
14
M-R

Bitte lesen Sie die Antworten unter Wann Sie WP_query (), query_posts () und pre_get_posts verwenden sollten.

Es ist eine großartige Ressource, wenn Sie irgendwelche Zweifel haben.

6
fischi