Εάν σχεδιάζετε ή αναπτύσσετε θέματα ή προσθήκες 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.