Recientemente, estaba a cargo de un proyecto que requiere el filtrado de un tipo personalizado de publicación basado en los valores almacenados utilizando la API de WordPress Metata. Debido a cuán popular es el uso de metadatos para almacenar datos adicionales (y tipos de publicaciones personalizadas), pensé que sería útil compartir algunos detalles sobre cómo funcionaría la filtración. En este artículo, me referiré principalmente a publicaciones, pero la teoría también se aplica a los tipos de publicaciones personalizadas. Una breve introducción a los metadatos en un entorno de WordPress, los metadatos es una forma de almacenar y tomar información adicional sobre un objeto de WordPress en particular, sin tener que registrar tablas adicionales. El ejemplo más simple a este respecto es la capacidad de agregar campos personalizados a una publicación de WordPress.
Cuando se crean, estos campos personalizados se almacenan en la tabla Metadate Post, que (suponiendo una tabla predeterminada de WP_) se almacena en la tabla WP_PostMeta. Los desarrolladores de complementos de WordPress generalmente usan metadatos para almacenar campos personalizados, ya que no requieren cambiar la base de datos para funcionar. Objeto WP_Query: ¿Qué es y qué puedes hacer con él? Para poder filtrar después de los metadatos, primero debe cumplir con el objeto WP_QUEY. El objeto WP_Query trata las complejidades de las solicitudes de entidad a un sitio web de WordPress. En realidad, el lugar más común que puede cumplir e interactuar con WP_QUEY es en el bucle cuando muestra una lista de publicaciones o páginas
Lo que WP_Query está haciendo es determinar con qué tipo de consulta tiene que lidiar y hacerse cargo de las publicaciones solicitadas. Piense en un archivo de categorías, un archivo anticuado, un flujo o búsqueda como buenos ejemplos. También contiene mucha información sobre la demanda, que se puede extraer más tarde, por ejemplo, cuando se construye la paginación. El uso del objeto WP_Query le permite crear y acceder a una colección de publicación filtrada personalizada basada en un conjunto de argumentos especificados. Por esta razón, le permite mostrar estas publicaciones y sus datos asociados de la manera que desee. Debido a que todos los datos implícitos de las entidades de WordPress se basan en publicaciones (páginas, productos, cualquier tipo de publicaciones personalizadas), el objeto WP_Query es probablemente la clase más utilizada en todo el sitio de WordPress. En la página de su blog hay una lista de publicaciones, Limitas cuántos se muestran (generalmente 10) y devuelve el número total de publicaciones, para que la función de paginación pueda determinar qué enlaces de paginación se muestran. ¿Necesita ayuda para su próximo proyecto de WordPress? ¡Contrata a Jonathan Bossenger y comienza a trabajar con él de inmediato! Uso de Post Parameters y WP_Query para filtrar los resultados post/post_type para ver algunos ejemplos simples de WP_Query sobre cómo puede filtrar publicaciones o tipos de publicaciones de acuerdo con sus parámetros.
[Code lang = ‘php’] $ args = array (‘Post_per_page’ => 10); $ the_query = new WP_Query ($ args); [/código] Esta es una consulta bastante simple, que transmite una serie de argumentos que solo contienen el argumento “Post_per_page”. Esta consulta debe recibir todas las publicaciones, pero limite el número de publicaciones a 10. Así que veamos cómo sería la consulta SQL real. [Code lang = ‘sql’] Seleccione SQL_CALC_FOUND_ROWS WP_POSTS.ID desde wp_posts donde 1 = 1 y wp_posts.type = ‘post’ y (wp_posts_status = ‘publicación’ o wp_posts.post_status = ‘experimentado’ = ‘o post_status_post’ futuro ‘futuro’. ‘O wp_posts.post_status =’ sketch ‘o wp_posts.post_status =’ waiter ‘o wp_posts.post_status =’ expirat ‘o wp_posts.post_status =’ privado ‘) orden por wp_posts.post_date describe 0, 10 [Code] en el tiempo qué Los detalles más grandes de la consulta SQL real podrían ser un poco técnicas, es bastante bueno ver todas las cosas que WP_Query hace de forma predeterminada (usando SQL_CALC_FOUND_ROWS, verificando cosas como Post_status, ordenando después de Post_Date), para expandir nuestros argumentos. WP_Query A A A poco más lejos. [Code lang = ‘php’] $ args = array (‘Post_per_page’ => 10, ‘Orderby’ => ‘Title’, ‘Order’ => ‘ASC’); [/código] Así que ahora esperaríamos que los resultados de la interrogación se ordenen de acuerdo con el campo del título y en orden creciente. Muy seguro, la consulta SQL se ha actualizado:
[Code lang = ‘sql’] Seleccione SQL_CALC_FOUND_ROWS WP_POSTS.ID desde wp_posts donde 1 = 1 y wp_posts.type = ‘post’ y (wp_posts_status = ‘publicación’ o wp_posts.post_status = ‘experimentado’ = ‘o post_status_post’ futuro ‘futuro’. ‘O wp_posts.post_status =’ sketch ‘o wp_posts.post_status =’ waiter ‘o wp_posts.post_status =’ expirat ‘o wp_posts.post_status =’ privado ‘) orden por wp_posts.post_title asc 0, 10 [código] suficientes estándar , pero es interesante ver cómo el poder de WP_QUEY es simplemente aplicando algunos argumentos de consulta. Los documentos WP_Quey en WordPress Codex contienen todos los diferentes tipos de parámetros de consulta disponibles. Es un documento bastante extendido y muy útil para leer. El uso de parámetros de campo personalizados para filtrar los resultados post/post_type después de los valores de metal/publicación hasta ahora me he centrado en los parámetros que están directamente relacionados con las publicaciones, porque representan campos en la tabla WP_Posts. Ahora debemos mirar un poco más y comprender cómo filtrar las publicaciones en función de los metadatos. Comencemos con un ejemplo simple. Tiene un tipo de publicación personalizado llamado producto (que tiene un “producto” Slog) y tiene un campo personalizado llamado “color” en el que almacena una sola cadena de color (por ejemplo, blanco, amarillo) para ese producto. Ahora desea hacerse cargo de todos los productos donde el color es azul.
Expandir el interrogatorio por encima de sus argumentos WP_QUEY ahora se vería así: [código lang = ‘php’] $ args = array (‘post_type’ => producto ‘,’ Post_per_page ‘=> 10,’ Orderby ‘=>’ Title ‘, ‘orden’ => ‘asc’, ‘meta_key’ => ‘color’, ‘meta_value’ => ‘azul’); [/código] Lo primero que debe ver es la forma en que agregamos un argumento “post_type”, de modo que solo filtremos los tipos de productos. La segunda cosa que agregué son los argumentos Meta_Key y Meta_Value. Ahora esperaría ver la consulta actualizada para filtrar solo después de los productos e incluir una unión en la tabla de metadatos donde los metadatos y un filtro se almacenan después del “color” meta_key: [código lang = ‘sql’] seleccione sql_calc_found_rows wp_posts . ID de WP_Posts Inner Join WP_PostMeta en (wp_posts.id = wp_postmeta.id) donde 1 = 1 y (wp_postmeta.meta_key = ‘color’ y wp_postmeta.meta) y wp_posts.post_type ” = ‘publication’ o wposts.post.post_stata = = ‘expirado’ o wp_posts.post_status = ‘futuro’ o wp_posts.post_status = ‘sketch’ o wp_posts.post_status = ‘post_status’ ‘o wp_posts.post_status =’ expirat ‘o wp_posts.post_status =’ privado ‘) por wp_posts.id Orden por wp_posts.post_title asc límite 0, 10 [/código]
Muy seguro, aquí está. Así que vamos a llevarlo un poco más lejos. Suponga que tenía las meta teclas “disponibles_from_date” y “disponible_to_date” en sus productos que desea crear un formulario de búsqueda en el que los usuarios puedan buscar productos que estén “disponibles” en esos datos. El usuario elegiría los campos desde y hasta la fecha y deseó filtrar sus publicaciones en función de estos campos. No puede simplemente actualizar sus campos Meta_Key y Meta_Value en los argumentos de interrogación, debe usar una matriz de argumentos Meta_Query, para personalizar su consulta aún más. [código lang = ‘php’] $ args = array (‘post_type’ => ‘producto’, ‘Post_per_page’ => 10, ‘Orderby’ => ‘Title’, ‘Order’ => A ASC ‘,’ Met_Query = > array (‘relación’ => ‘y’, array (‘key’ => disponible_from_date ‘,’ valor ‘=> array ($ from =>’ date ‘,), matrix (‘ key ‘=> disponible_la_data’, ‘,’, ‘ valor ‘=> matriz ($ from,),)); [/Código] (tenga en cuenta que en el ejemplo anterior las variables $ desde [código lang = ‘sql’] seleccione sql_calc_found_rows wp_posts.id de wp_posts Inner Join wp_postmeta on (wp_posts.id = wp_postmeta.id) inner unión inner ) .Meta_Ky = ‘
Disponible_From_Date ‘y Cast (wp_postmeta.meta_value como fecha) entre 2017-10-01’ y ‘2017-10-01’) y (mt1.meta_key = ‘disponible_to_date’ y Cast (MT1.) Entre ‘2017-10-01’ ‘ Y ‘2017-10-01’))) y wp_posts.post_type = ‘post’ y (wp_posts_status = ‘publish’ o wp_posts.post_status = ‘expirat’ o wp_posts.status = ‘futuro’ o wp_posts.post_status = ‘sketch’ o wp_posts.post_status = ‘waiting’ o wp_posts.post_status = ‘expirado’ o wp_posts.post_status = ‘privado’) Grupo por wp_posts.id orden por wp_posts.0.10 límite [/bod] es muy considerado, pero agrega brevemente el Siguiente a la consulta: transmitir valores de meta_key como datos (generalmente almacenados como texto) para permitir que la fecha se filtre
Publicaciones de filtrado en las que la tecla disponible_to_date está entre los dos datos enviados
También filtrando publicaciones en las que la clave disponible_to_date está entre los dos datos enviados

¡Esta es una consulta SQL SQL para agregar solo una matriz adicional de argumentos a sus argumentos de consulta! Por qué debe saber mejor WP_Query la mayor parte del tiempo, al construir un sitio web de WordPress, nunca lo usará o tendrá que preocuparse por el objeto WP_Quey. Si crea un tema, un tema infantil (o un complemento simple), es posible que deba usar WP_Query para tomar su publicación o lista de páginas, pero solo si realmente necesita una personalización profunda. En su mayor parte, el objeto WP_QUEY ya está en el campo y una verificación simple “if (have_posts ())” es todo lo que necesita para usar el bucle. Sin embargo, si crea algo más específico (un complemento más avanzado que usa publicaciones personalizadas o tema infantil) que tenga que hacer más que hacerse cargo y enumerar las publicaciones o páginas, en algún momento, deberá usar el objeto WP_QUEY. Saber (o simplemente contratar a alguien que sepa) cómo usar el objeto WP_QUEY ahorrará horas durante el tiempo de desarrollo y mejorará no solo el código del producto, sino que también se asegurará de que cumpla con los estándares y prácticas de WordPress. Esto también significa que si alguna vez tiene que contratar desarrolladores adicionales de WordPress para continuar trabajando en su producto, podrán hacerse cargo y actualizar sus consultas en un momento. Volvamos a ese ejemplo de metadatos originales que publicamos anteriormente (el que tiene la fecha de la fecha). Imagínese si debe construir esa consulta y generar sus resultados sin usar WP_QUEY. Global $ WBDB;
$ Query = “Seleccione SQL_CALC_FOUND_ROWS WP_POSTS.ID desde wp_posts Inner Join WP_POSTMETA ON (WP_POSTS.ID = WP_POSTMETA.ID) Inner Join WP_POSTMETA como MT1 ON (WP_POSTS.ID = MT1.POST_ID = MT1.POST_ID = WRE. ‘Disponible_from_date’ y Cast (wp_postmeta.meta_value como fecha) entre $ desde post ‘y (wp_posts.post_status =’ publicación ‘o wp_posts.post_status =’ expirado ‘o wposts.post_status =’ futuro ‘o wposts.post_status =’ schitch ‘ o wp_posts.post_status = ‘en espera’ o wp_status = ‘publicaciones. expirado’ o wp_posts.post_status = ‘privado’) Grupo por wp_posts.id orden por wp_posts.post_itle asc límite 0, 10 “$ resultados = $ wpdb-> get_results (( $ consulta, objeto); usando wp_query, en lugar de escribir (escriba (y prueba) todo ese SQL, su código podría verse como el siguiente ejemplo: [código lang = ‘php’] $ args = array (‘post_type’ => producto S ‘,’ Post_per_page ‘=> 10,’ Orderby ‘=>’ Title ‘,’ Order ‘=>’ ASC ‘,’ Meta_Query ‘=> Array (‘ Relation ‘=>’ y ‘, Array (‘ Key ‘= = > ‘Disponible_from_date’, ‘valor’ => array ($ desde ‘value’ => matrix ($ desde $ resultados = wp_query ($ args);
Consultas de publicación avanzada: comprensión del objeto WordPress WP_QUEY
Tags Consultas de publicación avanzada: comprensión del objeto WordPress WP
homefinance blog