pre_get_posts
Σας αφήνει να αλλάξετε τις ρυθμίσεις ενός ερωτήματος πριν εκτελεστεί, π.χ. άρθρα ανά σελίδα, τύπους άρθρων ή σειρά, χωρίς νέο ερώτημα.
Πότε εκτελείται
Το pre_get_posts εκτελείται μέσα στο WP_Query αφού οριστούν οι μεταβλητές του ερωτήματος αλλά πριν γίνει η ερώτηση στη βάση δεδομένων. Εκτελείται για κάθε WP_Query: το κύριο ερώτημα της σελίδας, δευτερεύοντες βρόχους, widgets και ερωτήματα στη διαχείριση.
Παίρνετε το ίδιο το αντικείμενο του ερωτήματος, οπότε ό,τι αλλάξετε με $query->set() ισχύει αμέσως.
Παράμετροι
$queryWP_Query |
Το αντικείμενο WP_Query (περνά με αναφορά). |
|---|
Παράδειγμα: Μόνο άρθρα ιστολογίου στα αποτελέσματα αναζήτησης
add_action( 'pre_get_posts', function ( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
if ( $query->is_search() && ! $query->get( 'post_type' ) ) {
$query->set( 'post_type', 'post' );
}
} );
Καλό να ξέρετε
- Ελέγξτε πρώτα ! is_admin() και $query->is_main_query(), αλλιώς θα αλλάξετε και μενού, widgets και λίστες της διαχείρισης.
- Χρησιμοποιήστε τις μεθόδους του αντικειμένου που παίρνετε, όπως $query->is_search(), και όχι τη γενική is_search(), που ελέγχει το κύριο ερώτημα.
- Αν αλλάξετε το posts_per_page εδώ, αντί να τρέξετε νέο ερώτημα στο πρότυπο, η σελιδοποίηση συνεχίζει να λειτουργεί.