Realmente me gustó el artículo de David hace unas semanas sobre los elementos básicos de la programación funcional, tal como se aplica a las estructuras de datos vestidas de WordPress. Una de las cosas hermosas de trabajar con él es que también aprendo mucho. Hoy, quiero continuar explorando el mundo algo funcional introducido por David y sugerir algunas formas más de interactuar con una entidad muy importante en WordPress: el objeto WP_Quey. Un wp_quey es un objeto A wp_quey no es una entidad abstracta. Es un objeto, en el sentido de programación. Cuando comencé a aprender WordPress, WP_QUEY era una abstracción mística: algo que has invocado, como un hechizo mágico, para que puedas ejecutar funciones como The_itle () y the_content () en un bucle personalizado.
Sin embargo, un wp_query no es una entidad abstracta; Más bien, es un objeto, en el sentido de programación. También escribí sobre los elementos básicos de los objetos y la programación orientados; Resumamos esta discusión rápidamente:
Cada objeto individual pertenece a una clase más grande de esos objetos. Por ejemplo, un objeto individual que pertenece a la clase de automóvil.
Cada objeto tiene cosas en común con otros objetos en su clase. Estos aspectos comunes se dividen en propiedades y métodos.
Las propiedades son cosas sobre un objeto dado. Para un objeto de automóvil, una propiedad puede ser “color”: el “color” en sí es la propiedad, y cierto objeto de automóvil podría tener “rojo” o “azul” como valor para esa propiedad.
Los métodos son cosas que un objeto en particular puede hacer. Un objeto de automóvil podría tener () y detener () métodos.
Ahora veamos WP_Query. Cualquier objeto WP_Query tiene una gran lista de propiedades y métodos. Las propiedades de un objeto WP_Query contienen todo tipo de estado e información, que en realidad se almacenan en el objeto en sí. Incluso puede leerlos directamente usando print_r () desde php: las primeras filas de una print_r de un objeto wp_query

Entonces, nuestro objetivo de hoy es traer WP_Query al mundo de una cosa tangible que podemos manejar. Creé un desafío para hacer algo con WP_Query que no podías hacer simplemente ejecutar bucles personalizados. Proyecto: Alfabetización por contenido Nuestro objetivo con este código es imprimir lo siguiente en la página:
Una lista de todas las publicaciones en una de nuestras publicaciones, editorial,
Con el título y un breve extracto del contenido,
Alfabetizado después de la primera letra del contenido de la publicación.
La tercera parte es la complicada, porque WP_Query no tiene la opción de “contenido post” en las opciones de pedido que permite.
El producto final se ve así:
Tenga en cuenta que las publicaciones no están ordenadas por el título de la publicación, sino en orden alfabético después de las primeras palabras de su contenido. El código de este ejemplo es lo suficientemente corto como para incluir todo en el contenido de este artículo: // Dígale a Usort qué comparar la función wpshout_by_content ($ a, $ b) {return strcmp (wp_strip_all_tags ($ a [‘post_content’), wp_strip_all_tags ($ B [‘post_content’]); } // Registre el [ABC_Editorials] ShortCode add_ShortCode (‘ABC_Editorials’, ‘WPShout_ABC_Edorials’); Function wpshout_abc_editorials () {// obtiene nuestro objeto wp_quey $ args = array (‘tax_query’ => array (‘taxonomy’ => categoría ‘,’ campo ‘=> slug’, ‘términos’ => editorial ‘,),)) , ‘Post_per_page’ => -1,); $ Query = new WP_Query ($ args); // solo mantenga el proyecto de publicaciones de la consulta $ publicaciones = $ query-> publicaciones; // get just_title y post_content de cada post $ posts = array_map (function ($ post) {return array (‘post_title’ => $ post-> post_title, ‘post_content’ => $ post-> post_content,);}, $ correo); // Ordenar por Post Content Usort ($ post, ‘wpshout_sort_by_content’); // construir una cadena para volver a shortcode $ return = ”; Foreach ($ publicaciones como $ post) {$ return. = ‘
‘. $ post [‘post_title’]. ‘
‘; $ return. = subStr (wp_strip_all_tags ($ post [‘post_content’), 0, 260); } // return Built String Return $ return; } Obteniendo el objeto WP_Query Comenzamos con una llamada simple para crear un objeto WP_Query que contenga todas las publicaciones que pertenecen a la categoría editorial.

$ args = array (‘tax_query’ => array (array (‘taxonomy’ => ‘categoría’, ‘campo’ => ‘Slug’, ‘termini’ => editorial,),), ‘Post_per_page’ => -1 ,); $ Query = new WP_Query ($ args); Si el wp_quey es nuevo para usted o el código anterior es desconocido, escribí sobre él aquí. La parte cero de la matriz de publicaciones La propiedad más importante del objeto wp_quey, especialmente para nuestros propósitos, son publicaciones. Esta propiedad contiene toda la información, el título de la publicación, el autor, la fecha de publicación, el contenido y muchos más, para cada una de las publicaciones que hemos hecho cargo con nuestra consulta. Publicar almacena toda esta información directamente, en la forma en que un libro almacena libros.
Entonces, lo primero que haremos es crear una nueva variable, $ Post, con solo las cosas en WP_Query que nos interesa, como sigue: $ Posts = $ Query-> Posts; Esto nos pone a cero solo en las publicaciones tomadas en sí misma. (Por cierto, esto es exactamente lo mismo que la función get_posts () WordPress con los mismos $ args y guardarlo como $ publicaciones.) Array_map () -ng matriz La propiedad de publicaciones de wp_quey es como un estante de libros, y nuestros objetos WP_POST son como libros individuales. ¿En qué publicaron? Tiene una serie de objetos WP_Post: objetos que representan nuestras publicaciones individuales tomadas, cada una con muchas propiedades diferentes, como Post_title, Post_Excerpt y Post_Content.

Entonces, nuevamente, la propiedad de publicaciones de WP_QUEY es más bien como un estante de libros, y nuestros objetos WP_Post son como libros individuales, cada uno con sus propias propiedades. En nuestro caso, solo nos importan dos propiedades de cada libro: su título y
Su contenido.
Aquí array_map (). Como explicó David, Array_Map () es una manera perfecta de tomar una gran matriz (como nuestra matriz de objetos WP_Post) y mantener solo esas piezas que necesitamos. $ Posts = Array_Map (function ($ post) {return Array (‘post_title’ => $ post-> post_title, ‘post_content’ => $ post-> post_content,);}, $ publicaciones); Para cada publicación $ de $ Post, simplemente construimos una nueva matriz con dos elementos llamados: post_title y post_content. Luego ahorramos el resultado de todo esto a $ publicaciones.
Ordenar por contenido El siguiente paso es ordenar por la primera letra de nuestro título. Debido a que $ Post es una matriz asociativa, tendremos que usar algo un poco complicado, usort (). Cubrí seco () antes. Le pide que escriba su propia función de comparación, que luego se ejecuta en la pintura asociativa que dio, comparando todos los elementos de la matriz y poniéndolos en orden. La función que escribí es: sin hundirme demasiado, esta función pregunta “¿Cuál del contenido post_post de los dos elementos comienza el primero en el alfabeto?” Function wpShoutSorCentent ($ a, $ b) {return strcmp (wp_strip_all_tags ($ a [‘post_content’), wp_strip_all_tags ($ b [‘post_content’)); } Después de haber creado $ publicaciones, llamaremos a Usort () en él y transmitiremos usort () nuestra función de comparación personalizada, de la siguiente manera:
Usort ($ post, ‘wpShoutsortByContent’); Esto clasifica todas nuestras publicaciones en orden alfabético por contenido. Creando resultados con foreach () en un wp_quey regular, utilizamos un bucle personalizado y funciones de WordPress prescritas como the_itle () y the_content (). Pero, debido a que hemos desmontado las publicaciones de manera personalizada, podemos usar un bucle foreach () para decidir exactamente qué salida para generar: $ return = ”; Foreach ($ publicaciones como $ post) {$ return. = ‘
‘. $ post [‘post_title’]. ‘
‘; $ return. = subStr (wp_strip_all_tags ($ post [‘post_content’), 0, 260); } return $ return; Guardamos todo esto en una variable, $ return, que luego regresa al código corto que llamó la función. (Escribir este código en un código corto es simplemente una forma conveniente de mostrarlo en la página, si desea obtener más información sobre códigos cortos, lea aquí). Devuelve este texto para imprimir en el contenido de la página en cualquier lugar del código corto fue ingresado, dándonos el resultado final. Use WP_Query cómo desea el propósito de este artículo es sugerir algunas formas de confiar en los objetos WP_Query, no como misterios que de alguna manera generan nuestros rizos en la zona de confort, sino como objetos de programación que pueden ser gratuitos cuando sea necesario. Esperamos que esto ayude a eliminar las barreras cuando las capacidades predeterminadas de WordPress no cubran sus necesidades. ¡Gracias por leer! Imagen de crédito: Catálogo de imágenes
homefinance blog