Hasta ahora, en esta serie, ha aprendido cómo acceder a los metadatos de WordPress y trabajar con las matrices en las que se devuelven. No solo agregamos campos personalizados a las publicaciones de WordPress para que podamos mostrar esta información, sino también para que podamos ordenar por ella..
Ahora que sabe cómo recuperar y mostrar metadatos, es hora de aprender a personalizar el bucle de WordPress para devolver solo las publicaciones con valores meta específicos.
Para personalizar lo que publica WordPress devuelve en función de los metacampos, necesitamos usar WP_Query
y especifique un meta_query
. Si, por ejemplo, tuviéramos un tipo de publicación personalizada llamada 'películas' que tuviera un campo personalizado llamado 'director', podríamos consultar las películas cuyo director fue director de uno de los tres Guerra de las Galaxias peliculas.
Eche un vistazo al código a continuación y vea si puede utilizar su dominio de los arreglos que obtuvo en la última parte para comprender lo que está pasando con el meta_query
, que voy a desglosar lo que está pasando bajo el código.
$ sw_args = array ('post_type' => 'films', 'meta_query' => array (array ('key' => 'director', 'value' => array ('George Lucas', 'Richard Marquand', ' Irvin Kershner '),' compare '=>' IN ',))); $ consulta = nueva WP_Query ($ sw_args); if ($ the_query-> have_posts ()) echo 'Películas de Star Wards Directors
'; eco '
Como puede ver, tenemos una serie de nombres de directores ubicados dentro de otras tres matrices. Vamos a desarmarlo pieza por pieza..
Primero, comenzamos una matriz para nuestro WP_Query
args Después de nuestro primer argumento 'post_type', comenzamos una matriz para alojar nuestro meta_query
argumentos.
Dentro de eso, especificamos qué clave buscar, en el caso 'director'. También proporcionamos una serie de valores para buscar en esa clave.
El último argumento es cómo comparar esos valores, en este caso especificamos "IN" para recuperar cualquier publicación con estos valores en el director clave.
¿Qué pasaría si quisiéramos películas que estuvieran dirigidas por un director de una película de Star Wars, pero que no se excluyeran las precuelas de Star Wars? Podemos añadir otra serie de argumentos a nuestra meta_query
, pero esta vez para obtener valor utilice una serie de títulos de esas películas para la clave título de la película
y para comparar, use 'NOT LIKE' para excluir las publicaciones que tengan estos valores en el título de la película
campo.
$ sw_args = array ('post_type' => 'films', 'meta_query' => array (array ('key' => 'director', 'value' => array ('George Lucas', 'Richard Marquand', ' Irvin Kershner '),' compare '=>' IN ',), array (' key '=>' film_title ',' value '=>' Phantom Menace ',' Attack of the Clones ',' Revenge of the Sith ' ), 'compare' => 'NO ME GUSTA'),)); $ consulta = nueva WP_Query ($ sw_args);
Ahora WordPress buscará películas de estos tres directores, cuyo título no es una de las tres precuelas..
Hasta ahora te he enseñado a usar WP_Query
para buscar publicaciones que tengan valores específicos para un campo personalizado, pero no cómo mostrar esos campos.
Mostrar estos campos es casi lo mismo que antes, pero en lugar de usar get_the_ID ()
para especificar ID para get_post_meta ()
Lo especificamos en un contexto de objeto. Así que en nuestro bucle, que se puede ver a continuación, la ID se recupera de forma un poco diferente utilizando $ consulta-> post-> ID
.
$ sw_args = array ('post_type' => 'films', 'meta_query' => array (array ('key' => 'director', 'value' => array ('George Lucas', 'Richard Marquand', ' Irvin Kershner '),' compare '=>' IN ',), array (' key '=>' film_title ',' value '=>' Phantom Menace ',' Attack of the Clones ',' Revenge of the Sith ' ), 'compare' => 'NO ME GUSTA'),)); $ consulta = nueva WP_Query ($ sw_args); if ($ the_query-> have_posts ()) echo 'Películas de Star Wards Directors
'; eco '
Al igual que en la última parte cuando utilizamos WP_Query
para encontrar publicaciones con ciertos valores para varios campos personalizados, podemos usar WP_Query
equivalente de la tabla de usuarios WP_User_Query
.
Por ejemplo, si tuviéramos un campo personalizado llamado nivel de suscriptor
y quería encontrar solo aquellos usuarios que tenían el nivel de suscriptor de extra especial
o súper especial
Podríamos, de la misma manera que buscamos películas dirigidas por los tres directores de las películas de Star Wars:
$ args = array ('meta_query' => array (array ('key' => 'subscriber_level', 'value' => array ('extra_special', 'super_special'); 'compare' => '='))) ; $ user_query = new WP_User_Query ($ args); if (! empty ($ user_query-> results)) echo 'Usuarios extra y super especiales
'; eco '
Al igual que con WP_Query
, podemos combinar diferentes comparaciones para controlar aún más a qué usuarios devuelve nuestra consulta. El siguiente ejemplo combina la última consulta con una consulta, esta vez del wp_users
tabla propia para cualquier usuario cuyos nombres sean Luke, Han o Leia.
$ args = array ('meta_query' => array (array ('key' => 'subscriber_level', 'value' => array ('extra_special', 'super_special'); 'compare' => '=')) 'search' => array ('Luke', 'Han', 'Leia'), 'search_columns' => array ('user_nicename', 'display_name'),); $ user_query = new WP_User_Query ($ args); if (! empty ($ user_query-> results)) echo 'Usuarios extra y súper especiales llamados Luke, Han o Leia
'; eco '
En esta serie, se han introducido los metadatos de WordPress y se han aprendido algunas lecciones sobre los conceptos básicos de PHP en el camino..
Ha aprendido cómo obtener los valores de los campos que almacenan los metadatos de las publicaciones y los usuarios, y cómo construir consultas para las publicaciones y los usuarios en función de los valores meta. Con este conocimiento, puede estar preparado para trabajar con algunos campos personalizados y en el camino a utilizar WordPress como un sistema complejo de administración de contenido..