Προσαρμοσμένος βρόχος / ερώτημα βάσει προσαρμοσμένων πεδίων - CSS-Κόλπα

Anonim
Τελευταία ενημέρωση από τον Jason Witt.

Εάν σχεδιάζετε ή αναπτύσσετε θέματα ή προσθήκες WordPress, υπάρχει μια καλή πιθανότητα ότι κάποια μέρα θα χρειαστεί να κάνετε ένα ερώτημα για προσαρμοσμένα μετα-πεδία. Αυτά είναι τα εντελώς προσαρμοσμένα ζεύγη κλειδιών / τιμών που μπορείτε να επισυνάψετε σε οποιαδήποτε ανάρτηση, σελίδα ή προσαρμοσμένο τύπο ανάρτησης. Το WordPress έχει ένα βασικό περιβάλλον εργασίας χρήστη από προεπιλογή ή μπορείτε να χρησιμοποιήσετε κάτι όπως τα Προσαρμοσμένα προσαρμοσμένα πεδία για να τα απολαύσετε. Αλλά κάτω από την κουκούλα, η ACF χρησιμοποιεί τακτικά προσαρμοσμένα πεδία.

Αυτή η σελίδα με πολύ απόσπασμα που βλέπετε αυτή τη στιγμή γράφτηκε το 1999. Εκείνη τη στιγμή, για να ζητήσετε αναρτήσεις με συγκεκριμένα προσαρμοσμένα πεδία, θα πρέπει να χρησιμοποιήσετε την καθολική μεταβλητή «$ wpdb». Αυτό μπορεί να χρησιμοποιηθεί για τη δημιουργία ερωτημάτων MySQL που δεν υποστηρίζει η κλάση WordPress WP_Query (). Ευτυχώς σήμερα, το WordPress έχει επιχειρήματα που υποστηρίζουν ερωτήματα για προσαρμοσμένα μετα-πεδία.

Εδώ, θα καλύψουμε τους διαφορετικούς τρόπους με τους οποίους μπορείτε να ζητήσετε και να μεταβείτε σε αναρτήσεις με συγκεκριμένα προσαρμοσμένα πεδία (και τις τιμές τους). Θα μπορείτε να χρησιμοποιήσετε αυτές τις πληροφορίες είτε χρησιμοποιείτε την WP_Queryτάξη query_posts(), είτε get_posts(). Από query_posts()και get_posts()είναι περιτυλίγματα για την WP_Queryτάξη. Όλοι αποδέχονται τα ίδια επιχειρήματα.

Τα επιχειρήματα του ερωτήματος

Εδώ είναι ένα βασικό παράδειγμα ενός ερωτήματος WordPress που λαμβάνεται από το WordPress Codex.

have_posts() ) ( echo '
    '; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
  • ' . get_the_title() . '
  • '; ) echo '
'; ) else ( // no posts found ) /* Restore original Post Data */ wp_reset_postdata();

Αυτό $argsείναι το σημαντικό κομμάτι εκεί. Θα περάσουμε διαφορετικά επιχειρήματα για να κάνουμε αυτό το έργο όπως θέλουμε.

Όταν κάνετε ερώτημα για προσαρμοσμένο μετα, υπάρχουν δύο "ομάδες" ορισμάτων που μπορείτε να χρησιμοποιήσετε. Η μία ομάδα είναι για ένα απλό προσαρμοσμένο ερώτημα μετα-πεδίου και η άλλη ομάδα για πιο σύνθετα ερωτήματα προσαρμοσμένων μετα-πεδίων. Ας ξεκινήσουμε με την απλή ομάδα.

μετα-κλειδί

Το meta_keyόρισμα θα υποβάλει ερώτημα για κάθε ανάρτηση που έχει αποθηκευμένο το μετα-ID προσαρμοσμένου πεδίου στη βάση δεδομένων, ανεξάρτητα από το εάν υπάρχει ή όχι τιμή αποθηκευμένη για το πεδίο. Το meta_keyείναι το αναγνωριστικό που θα δώσει σε πεδία meta σας. Σαν αυτό:

Αυτό το παράδειγμα θα υποβάλει ερώτημα για κάθε ανάρτηση που έχει το προσαρμοσμένο μετα-πεδίο με το αναγνωριστικό του "field1".

$args = array( 'meta_key' => 'field1' );

μετα-τιμή

Το meta_valueόρισμα ερωτά την ανάρτηση που έχει την τιμή που ορίζετε. Το meta_valueόρισμα χρησιμοποιείται για τιμές συμβολοσειράς. Αυτό το παράδειγμα θα υποβάλει ερώτημα για αναρτήσεις με προσαρμοσμένο μετα-πεδίο που έχει την τιμή "data1".

$args = array( 'meta_value' => 'data1' );

Μπορείτε επίσης να συνδυάσετε τα δύο. Αυτό το παράδειγμα θα υποβάλει ερώτημα σε αναρτήσεις που έχουν το προσαρμοσμένο μετα-πεδίο με το αναγνωριστικό του "field1" που έχει την τιμή "data1".

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );

meta_value_num

Το όρισμα meta_value_num είναι παρόμοιο με το όρισμα «meta_value». Όπου το meta_valueόρισμα είναι η τιμή για τις τιμές συμβολοσειράς meta_value_num, προορίζεται για αριθμητικές τιμές.

Αυτό το παράδειγμα δείχνει πώς να υποβάλετε ερώτημα στο προσαρμοσμένο μετα-πεδίο "field1" εάν έχει τιμή "10".

$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );

μετα-σύγκριση

Το meta_compareεπιχείρημα κάνει ακριβώς αυτό που ακούγεται. Θα σας επιτρέψει να χρησιμοποιήσετε συγκριτές με τα ορίσματα «meta_value» και «meta_value_num`. Οι συγκριτές που μπορείτε να χρησιμοποιήσετε είναι '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , "ΜΕΤΑΞΥ", "ΟΧΙ ΜΕΤΑΞΥ", "ΔΕΝ ΥΠΑΡΧΕΙ", "REGEXP", "NOT REGEXP" ή "RLIKE". Ακολουθεί ένα παράδειγμα που δείχνει πώς να υποβάλλετε ερώτημα σε αναρτήσεις που δεν έχουν την τιμή "data1"

$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );

Περισσότερα σύνθετα ερωτήματα

μετα-ερώτημα

Το κύριο επιχείρημα που θα χρησιμοποιήσετε για σύνθετα ερωτήματα είναι meta_query. Αυτό το επιχείρημα από μόνο του δεν κάνει τίποτα. Απλώς λέει στο WordPress ότι θέλετε να κάνετε ένα ερώτημα για προσαρμοσμένα μετα-πεδία. Θα προσθέσετε επιπλέον ορίσματα μέσα meta_queryπου θα χρησιμοποιηθούν για τον καθορισμό του ερωτήματος.

κλειδί, τιμή και σύγκριση

Τα επιχειρήματα key, valueλειτουργούν ακριβώς με τον ίδιο τρόπο όπως meta-key, meta-valueόπως περιγράφεται παραπάνω. Το συγκρότημα compareείναι παρόμοιο με το απλό compareπαραπάνω, αλλά χρειάζεται διαφορετική λίστα συγκριτών. Το συγκρότημα compareχρησιμοποιεί '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'ANWEEN »,« ΔΕΝ ΜΕΤΑΞΥ »,« ΥΠΑΡΧΕΙ »ή« ΔΕΝ ΥΠΑΡΧΕΙ ». valueμπορεί να είναι ένας πίνακας, αλλά μόνο όταν η σύγκριση χρησιμοποιείται «IN», «NOT IN», «ANTWEEN» ή «NOT ANTWEEN».

Εάν χρησιμοποιείτε "EXISTS" ή "NOT EXISTS" με compare, δεν χρειάζεται να καθορίσετε ένα valueεπιχείρημα.

Εδώ είναι ένα παράδειγμα που θα υποβάλει ερώτημα σε αναρτήσεις αν έχει "πεδίο1" με την τιμή "δεδομένα1" και "πεδίο2" με την τιμή που δεν είναι "δεδομένα2".

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );

σχέση

Το relationχρησιμοποιείται όταν θέλετε να ζητήσετε προσαρμοσμένα μεταδεδομένα χρησιμοποιώντας μια λογική σχέση. Μπορείτε να χρησιμοποιήσετε ANDή OR. Για παράδειγμα, θα χρησιμοποιήσετε ANDγια να συγκρίνετε εάν τα δεδομένα1 και δεδομένα2 πληρούν τα κριτήρια και χρησιμοποιείτε ORεάν τα δεδομένα1 ή δεδομένα2 πληρούν τα κριτήρια.

Αυτό το επιχείρημα είναι αυτόνομο. Αυτό σημαίνει ότι δεν εμφανίζεται σε μεμονωμένες προσαρμοσμένες παραμέτρους μετα-πεδίου. Ας δούμε ένα παράδειγμα. Αυτό το παράδειγμα θα υποβάλει ερώτημα μόνο σε αναρτήσεις που έχουν "πεδίο1" με την τιμή "δεδομένα1" και "πεδίο2" με την τιμή "δεδομένα2".

$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );

Εάν αλλάξατε relationσε "Ή". Στη συνέχεια, θα ρωτούσε τυχόν αναρτήσεις αν το "field1" έχει την τιμή "data1" ή εάν το "field2" έχει την τιμή "data2".

τύπος

Το typeόρισμα σάς επιτρέπει να επιλέξετε τον τύπο δεδομένων για το ερώτημα. Μπορείτε να χρησιμοποιήσετε το "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME" ή "UNSIGNED".

Ο τύπος «ΗΜΕΡΟΜΗΝΙΑ» μπορεί να χρησιμοποιηθεί με το compare«ΜΕΤΑΞΥ» μόνο αν η μορφή ημερομηνίας είναι «ΕΕΕΕΜΜΜΗ».

Αυτό το παράδειγμα θα υποβάλει ερώτημα σε κάθε ανάρτηση όπου η τιμή του "field1" είναι αριθμητική.

$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );

Παράδειγμα πραγματικού κόσμου

Μέχρι στιγμής, έχω δώσει μόνο παραδείγματα με αυθαίρετα δεδομένα και πεδία. Τώρα, θα ήθελα να σας δείξω ένα πραγματικό παράδειγμα ερωτήματος προσαρμοσμένων μετα-πεδίων.

Το σενάριο

Έχετε δημιουργήσει έναν προσαρμοσμένο τύπο ανάρτησης συμβάντων. Ο τύπος ανάρτησης συμβάντων έχει προσαρμοσμένο πεδίο ημερομηνίας με το αναγνωριστικό του event_date. Θέλετε να δημιουργήσετε ένα ερώτημα που θα εμφανίζει τυχόν συμβάντα που θα ξεκινούν την τρέχουσα ημερομηνία έως τις επόμενες 30 ημέρες.

Θα χρησιμοποιήσουμε το meta_queryόρισμα καθώς θέλουμε να χρησιμοποιήσουμε το typeόρισμα για να ορίσουμε το πεδίο "event_date" ως τύπο δεδομένων "DATE".

Αυτό είναι το ερώτημα:

$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'event_date', 'value' => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ), 'compare' => 'BETWEEN', 'type' => 'DATE' ) ) ); $event_query = new WP_Query( $args );

Η valueείναι μια σειρά από την τρέχουσα ημερομηνία - από 1 ημέρα και 31 ημέρες από την τρέχουσα ημερομηνία. Δεδομένου ότι χρησιμοποιούμε το συγκριτικό "ANTWEEN" μόνο οι αναρτήσεις μεταξύ του πίνακα τιμών θα ερωτηθούν, γι 'αυτό θέλουμε να τις αντισταθμίσουμε κατά μία ημέρα.

Με αυτό το ερώτημα θα εμφανιστεί οποιοδήποτε συμβάν που θα συμβεί τις επόμενες 30 ημέρες.

συμπέρασμα

Η WP_Queryτάξη είναι μια πολύ ευέλικτη τάξη που θα σας επιτρέψει να δημιουργήσετε ένα πλήθος προσαρμοσμένων ερωτημάτων. Εάν θέλετε να μάθετε περισσότερα σχετικά με τα διαφορετικά ορίσματα που μπορείτε να χρησιμοποιήσετε για ερωτήματα, προτείνω να αναζητήσετε τη WP_Queryσελίδα codex.