Trabajar con estructuras de datos vestidas como “objetos dentro de las matrices dentro de WP_QUEY’s puede ser complicado. He trabajado para clientes que involucran muchas excavaciones en los datos del sitio, generalmente con wp_quey o con get_posts (). Eso significa trabajar con datos profundamente vestidos. Un objeto WP_Query, por ejemplo, es un objeto PHP que contiene un número de matriz PHP, como la matriz de consulta o la matriz de publicaciones. Estas matrices en sí tienen diferentes estructuras: las publicaciones, por ejemplo, es una matriz de todas las publicaciones tomadas en la consulta: cada una de ellas es su propio objeto, lleno de propiedades como Post_title y Post_Content.
No tienes que entender el párrafo anterior. Solo quiero señalar que trabajar con estructuras de datos vestidas, como los objetos de “matriz dentro” de WP_QUEY puede ser complicado. Hoy trabajaremos con un cierto desafío que presenta los datos vestidos: el desafío: clasificar y ordenar los datos vestidos Las dos complicaciones específicas que discutiré hoy son la clasificación y el pedido de los datos vestidos. Discutiré por qué es difícil y presentaré dos trucos específicos para facilitar esto:
Creación de pinturas cuyas claves corresponden a los valores de una variable y luego desea ordenar.
El uso juicioso del PHP Usort () para ordenar la matriz después de una propiedad arbitraria.
Ejemplo: Publicaciones ordenadas por el estado del comentario, el tipo de publicación y el título para la demostración de hoy, me di un requisito no muy diferente de lo que mis clientes podrían soñar. Quiero que un complemento elimine una lista de todas las publicaciones de mi sitio (de cualquier tipo de publicación) ordenadas de tres maneras:
Si cada publicación acepta o no comentarios, entonces: por tipo de publicación, entonces:
Alfabetizado.
El complemento de trabajo y lo que sale cuando ejecuto el complemento de trabajo en mi entorno de prueba local, el resultado se ve así:
Posté el código completo del complemento en GitHub. Para usarlo, descargue el complemento, instálelo y active y use el código corto [ABC_POSTS_BY_COMMENT_STATUS] en cualquier parte del contenido de cualquier publicación. (Por favor, contácteme si no está familiarizado con GitHub o la forma “manual” de instalar arados; estaría encantado de ayudarlo). Para seguir esta demostración, también tendrá que familiarizarse con cómo ambas matrices funcionan PHP, también como objetos PHP. Si tiene que leer estos temas, aquí hay presentaciones rápidas de matriz y objetos.

Orderby no lo cortará primero nota que la forma estándar de WordPress de permitirle pedir los resultados de las publicaciones, los argumentos de Orderby, no nos dará lo que necesitamos. No necesitamos nuestras publicaciones publicadas ordenadas solo después, por ejemplo, título o fecha; Los necesitamos ordenados consecutivamente después de tres cosas:
A través de comentarios abiertos o cerrados, entonces
Por el tipo de publicación entonces
Alfabético.
Entonces tendremos que ensuciar nuestras manos. Las siguientes secciones explican cómo. 1. Uso de las claves de matriz PHP para ordenar las publicaciones por estado del comentario La primera parte importante del código del complemento es la siguiente:
$ POSTS_BY_COMMENT_STATUS = Array (); Foreach ($ publicaciones como $ post) {$ posts_by_comment_status [$ post-> comment_status] [] = $ post; } Para los elementos básicos de este código:
Utiliza un bucle PHP foreach. Foreach ($ publicaciones como $ post) significa que este bucle se ejecuta una vez para cada publicación en nuestra gama de publicaciones en el sitio. La publicación actual es $ post, y la matriz es $ post. (Tomé esta matriz antes, usando get_posts () de WordPress). También creé una nueva matriz PHP, $ Post_By_Comment_Status; Continuaremos explicando el propósito.
Ahora veamos más profundamente en la línea principal, $ Post_By_Comment_Status [$ post-> comment_status] [] = $ post; . Aquí hay un detalle de lo que significa:
$ POSTS_BY_COMMENT_STATUS es el nombre de la nueva matriz que creamos en la primera línea de código.
[$ post-> comment_status] es una propiedad de la publicación actual. Puede tomar uno de los dos valores, abrir o cerrar, dependiendo de si la publicación individual actual permite o no comentarios.
Cuando escribimos $ POSTS_BY_COMMENT_STATUS [$ post-> comment_status], decimos: Crear un elemento de $ Posts_By_Comment_Status. La clave de este elemento matriz se establecerá igual al valor de $ post-> comment_status (entonces cerrado o abierto).
[] Significa que el valor en el que esta clave indica será una matriz y que crearemos el “siguiente elemento” (que podría ser el primer elemento) de esa matriz.
[] = $ post; Significa que el “siguiente elemento” de la matriz que creamos se establece para ser igual a la corriente de corriente.
Aquí hay algo importante que debe saber: si una publicación de $ en particular tiene un comentario_status de Open y $ Post_By_Comment_Status [Open] ya existe, entonces nuestra publicación se agregará automáticamente a $ Post_By_Comment En otras palabras, $ Post simplemente será el “próximo elemento” de la matriz a la que $ POSTS_BY_COMMENT_STATUS [Open].
Entonces, lo que devolvemos de esto es: todos nuestros objetos originales de $ post, pero ahora separados en los elementos cerrados y abiertos de nuestra nueva matriz $ POSTS_BY_COMMent_Status. ¡En otras palabras, hemos ordenado todas las publicaciones de nuestro sitio de acuerdo con si los comentarios están permitidos! Una vez que tenemos esta separación, ahora podemos hablar por separado en las publicaciones “comentarios abiertos” y “comentarios cerrados”, como en las siguientes líneas : $ Cerrado = wpshout_return_sorted_list ($ posts_by_comment_status [‘cerrado’], ‘comentarios cerrados:’); $ open = wpshout_return_sorted_list ($ posts_by_comment_status [‘Open’], ‘Comentarios abiertos:’); En estas líneas, ejecutamos una función dos veces, usando $ Post_By_Comment_Status [‘Cerrado’] y $ Post_By_Comment_Status [‘Open’] como argumentos. No discutiré a fondo la función en sí; La parte importante es que $ POSTS_BY_COMMent_Status [‘cerrado’] significa “una serie de todos nuestros comentarios cerrados”, y $ Posts_By_Comment_Status [‘Open’] significa “una serie de todos nuestros comentarios abiertos”. ¡Crear esa separación fue nuestro primer desafío y lo resolvimos!
2. Uso de las teclas de matriz PHP para ordenar las publicaciones publicando el próximo desafío es tomar el paquete de publicación con un determinado estado de comentarios (digamos “cerrado”) y ordenar estas publicaciones por tipo de publicación. Se nos ofrece una serie de publicaciones, todos con el mismo estado de comentarios. Llamé a esta matriz $ POSTS_OF_SAME_COMMENT_STATUS. Si comprende el ejemplo anterior, nuestra solución aquí tendrá mucho sentido para usted: $ POSTS_BY_POST_TYPE = Array (); Foreach ($ posts_of_same_comment_status como $ post) {$ publica_by_post_type [$ post-> post_type] [] = $ post; } Creamos una nueva matriz, $ POSTS_BY_POST_TYPE y separamos todas las publicaciones de $ POSTS_OF_SAME_COMMent_Status en diferentes claves de esa matriz (por ejemplo, post, página o elemento de cartera si tenemos como un puesto personalizado registrado). Con us-now– lindo chei. Lo que sabemos es que cada clave contiene solo publicaciones del mismo tipo de publicación y comentario. Resolvimos nuestro segundo desafío. 3. Usando usort () para ordenar las publicaciones por título en este momento, tenemos un paquete de publicaciones que ya se han ordenado por tipo de publicación y estado de comentarios. Nuestro tercer desafío es ordenar estas publicaciones en orden alfabético. Para esto, utilizaremos la función PHP Usort (). Mi propia introducción a Usort () fue a través de un artículo de Nicolas Kuttler sobre el orden manual de los resultados de WP_Query. Es una lectura muy recomendable.
Usaremos usort () de la siguiente manera: Usort ($ POSTS_OF_SAME_POST_TYPE, ‘WPSHOUT_REORY_QUERY_BY_POST_ITLE_ALPHABETIC’); función wpshout_reory_query_by_post_itle_alphabetical ($ a, $ b) {$ a_title = $ a-> post_title; $ b_title = $ b-> post_title; return (strcmp ($ a_itle, $ b_itle)> 0)? 1: -1; } Vamos a romper esto: Usort ($ POSTS_OF_SAME_POST_TYPE, ‘WPSHOUT_REORY_QUERY_BY_POST_ITLE_ALPHABETIC’); Ejecuta la función Usort () con dos argumentos. $ POSTS_OF_SAME_POST_TYPE es la matriz de objetos que acabamos de crear, y ‘wpshout_query_by_bost_itle_alphabetical’ es la función que usaremos para hacer.

Wpshout_reorder_query_by_post_title_alphabetical ($ a, $ b) nos dice que esta función tiene dos argumentos, llamados $ a y $ b. Cada uno de estos elementos son elementos de la matriz que intentamos ordenar. En otras palabras, cada uno es un objeto $ post.
$ a_title = $ a-> post_title; Solicite el post_title del primer elemento ($ a) y lo guarde en la variable $ a_itle.
$ b_title = $ b-> post_title; Solicite el post_title del segundo elemento ($ b) y lo guarde en la variable $ b_itle.
(strcmp ($ a_itle, $ b_itle)> 0)? 1: -1; Parece un plato, pero se pregunta: “¿Cuál de los títulos de las dos publicaciones es el primero en orden alfabético?”
El resultado se regresa a la función Usort (), lo que hace que la magia de reorden las publicaciones de acuerdo con los resultados que recibe. Esto tiene lugar en todas las publicaciones en la matriz.
El resultado, después de al menos una línea de lo que un gato golpeó en un teclado (gracias a los operadores de Ternari): ¡nuestras publicaciones, que ya estaban ordenadas por el estado del comentario y el tipo de publicación, ahora son alfabetizados! Hemos resuelto nuestro tercer y último desafío. Epilog: emito todo porque nuestros datos están muy estructurados y separados en este momento, tuvimos que usar bucles foreach para eliminarlos. Mi objetivo era mostrarle cómo resolví y ordené los datos, para que no profundice demasiado en la forma en que se envían. Solo sabes que los bucles cursos de Foreach son perfectamente sensibles, como decir “Cada semana, limpio cada habitación de la casa”. Si tiene alguna pregunta, estaría encantado de escucharlas en comentarios o por correo electrónico. ¡Ahora eres un tipo inteligente! Esperamos que esta publicación lo alentara a atacar las estructuras de datos vestidas, como los objects de WP_QUEY y GET_POSTS () matriz de las órbes que los necesita. Corta maneras extrañas. ¡Gracias por leer! Imagen de crédito: allispossible.org.uk
Datos de clasificación y pedido nombrados en WordPress: diversión con PHP y Usort Matrix ()
Tags Datos de clasificación y pedido nombrados en WordPress: diversión con PHP y Usort Matrix ()
homefinance blog