Μετάβαση στο περιεχόμενο

Early-bird άδεια εφ’ όρου ζωής: $199 εφάπαξ, μόνο για τους πρώτους 200 αγοραστές. Δείτε την προσφορά

pre_get_posts

Σας αφήνει να αλλάξετε τις ρυθμίσεις ενός ερωτήματος πριν εκτελεστεί, π.χ. άρθρα ανά σελίδα, τύπους άρθρων ή σειρά, χωρίς νέο ερώτημα.

  • Τύπος Action
  • Προέλευση WordPress
  • Από την έκδοση 2.0.0
  • Καλείται στο wp-includes/class-wp-query.php

Πότε εκτελείται

Το pre_get_posts εκτελείται μέσα στο WP_Query αφού οριστούν οι μεταβλητές του ερωτήματος αλλά πριν γίνει η ερώτηση στη βάση δεδομένων. Εκτελείται για κάθε WP_Query: το κύριο ερώτημα της σελίδας, δευτερεύοντες βρόχους, widgets και ερωτήματα στη διαχείριση.

Παίρνετε το ίδιο το αντικείμενο του ερωτήματος, οπότε ό,τι αλλάξετε με $query->set() ισχύει αμέσως.

Παράμετροι

Παράμετροι
$queryWP_Query Το αντικείμενο WP_Query (περνά με αναφορά).

Παράδειγμα: Μόνο άρθρα ιστολογίου στα αποτελέσματα αναζήτησης

PHP
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 εδώ, αντί να τρέξετε νέο ερώτημα στο πρότυπο, η σελιδοποίηση συνεχίζει να λειτουργεί.

Μεταφέρετε τα snippets σας μέσα σε ένα απόγευμα.

Η εισαγωγή δεν αλλάζει τίποτα μέχρι να κάνετε τη μετάβαση, και τα παλιά σας shortcodes συνεχίζουν να λειτουργούν.