Supongamos que tiene una página de categoría que debe mostrar todas las publicaciones que pertenecen a las subcategorías de esa categoría. Por ahora, no hay problema: una página de categoría muestra implícitamente todas sus publicaciones descendentes, ya sea que pertenecen directamente a esa categoría o cualquiera de sus subcategorías. Pero aquí está el turno: digamos que debe mostrarlos de tal manera que se muestren los nombres de las subcategorías (desafío no. 1), y bajo el nombre de cada subcategoría debe mostrar todas sus publicaciones (desafío 2). Permítame dar un ejemplo de cuándo desea lograr esto: por ejemplo, si tuviera una categoría principal llamada “Ciudad de la escuela a nivel estatal (cada publicación que detalla las propiedades de la escuela respectiva). Otro caso podría ser que la categoría principal es un año, las subcategorías son los meses de ese año, y las publicaciones son eventos que ocurrieron ese mes.
Aquí hay una ilustración de la estructura de categoría-pagina requerida:

Estructura de la página de la categoría basada en el vector infográfico creado por Frepik
Esta publicación nos llevará paso a paso para lograr este objetivo. Resumen de cómo operan las categorías en WordPress antes de comenzar, para revisar rápidamente cómo funcionan las categorías en WordPress. Como se dijo anteriormente, el comportamiento predeterminado de una página de categoría es mostrar una lista de todas las publicaciones en la categoría respectiva. El archivo de plantilla dentro del tema que se ocupa de la pantalla de categoría es categoría.php.
Si queremos que se muestre una determinada categoría de manera diferente, la dirigimos con su propio archivo de plantilla: el nombre del archivo comenzará con la categoría de palabras, seguida de un guión y luego por la categoría Slug o su ID.Este formato de nombre de archivo permite que el motor de WordPress lo reconozca como una plantilla de categoría específica.Por ejemplo, la categoría-13.php mostrará publicaciones en la categoría cuya ID es 13, y la categoría-mycat.php mostrará las publicaciones en la categoría cuya babosa es MyCAT.En el caso de que describiré en esta publicación, decidí usar el servidor, porque el administrador del sitio tiene control sobre él y, por lo tanto, puede mantenerse en diferentes sitios.Esto es diferente a una ID que se genera automáticamente y, por lo tanto, debemos cambiar el nombre del archivo de plantilla en cada sitio para adaptarse a diferentes ID de categoría.Esto, por supuesto, no es práctico.
Si bien este archivo de plantilla está a cargo de mostrar publicaciones en la página, el otro problema importante es obtener datos; como hemos notado antes, por defecto, WordPress no proporciona los datos sobre las subcategorías desde una página de categoría. Hay algunas formas diferentes de hacerse cargo de las subcategorías y publicaciones que les pertenecen: podemos usar las funciones comunes de WordPress o construir un $ WPDB personalizado. Este caso me pidió que usara una consulta personalizada, por razones que explicaré ahora. ¿Por qué un interrogatorio personalizado $ WPDB? Tengo que admitir que no recuerdo haber tenido que escribir una consulta SQL personalizada en WP, siempre he podido hacer lo que se necesitaba y obtener los datos necesarios utilizando consultas incorporadas de WordPress. En este caso, sin embargo, creo que habría problemas de rendimiento importantes si hemos elegido otras formas de tomar los datos. Permíteme guiarlo a través del proceso de pensamiento que me hizo ceder a escribir el SQL con dedos vacíos. Comenzaremos identificando qué datos tenemos y qué necesitamos obtener. Tenemos:
La ID de categoría principal
Una serie de publicaciones que pertenecen a las subcategorías principales de la categoría (Matrix Matrix $ publicaciones).
Nosotros necesitamos:
Las identificaciones subcategori
Una lista que conecta cada una de esas ID de subcategoría a las publicaciones que les pertenecen
Obtener ID de subcategori Esto es realmente relativamente fácil, porque podemos usar la función get_terms (), pasando la ID de categoría principal en el campo principal. Puede ver un ejemplo de uso en esta respuesta WPSE. Sin embargo, obtener la subcategoría a la que pertenece cada publicación es la parte desafiante, porque la publicación $ no tiene un campo que conecta la publicación con una identificación de categoría. Por lo tanto, para recuperar la relación, podemos seguir cualquiera de estas dos maneras: pasa por el bucle todas las subcategorías tomadas en la sección anterior y para cada una de ellas ejecuta la función get_posts (), cruzando la ID de subcategoría. Luego, utilizando los datos de cada get_posts (), podemos mostrar lo que se necesita. La principal desventaja de este método es la necesidad de acceder a DB (aunque usando get_posts ()), cuántas veces hay subcategorías, no muy eficientes. La segunda desventaja es que este método hace que la matriz de $ publicaciones sea redundante y este es un desperdicio de recursos.
La alternativa es regresar y obtener las ID de subcategori usando IDS de publicación. Esto significa pasar por la matriz de $ publicaciones en el bucle y, para cada publicación, obtener su categoría usando la función get_categories (). Esto, en sí mismo y en sí mismo, no tiene rendimiento, porque suponiendo que tengamos al menos unas pocas docenas de publicaciones significa acceder a DB varias veces. Además, debemos guardar los datos en una matriz y luego pasar por ellos para mostrar sus subcategorías y publicaciones.
Debido a que estas son las principales formas de obtener información y cada uno de ellos tiene problemas de rendimiento, sin mencionar que la producción de código pronunciada funciona, decidí usar la consulta SQL personalizada y personalizada. Ahora que entendemos el gran esquema de las cosas, nosotros, nosotros, nosotros. puede ingresar los detalles de la implementación del código. El hundimiento en el código comenzaremos por (1) tomando todas las publicaciones en la categoría, luego (2) crearemos una función que reciba una lista de subcategorías e ID de publicaciones que pertenecen a cada una de esas subcategorías. Después de tener estos datos, (3) llamaremos a esa función en el archivo de plantilla que crearemos para esta categoría específica, luego (4) analizaremos la información de publicación después de la subcategoría y (5) la usaremos para construir el página html. 1. Obtengamos todas las publicaciones en la categoría, comenzaremos con el paso fácil: obtener todas las publicaciones en la categoría sin paginación. Para hacer esto, adjuntaremos una función al gancho pre_get_posts y pasaremos -1 como una serie de publicaciones que se tomarán al recibir las publicaciones para nuestra categoría:
$ Main_cat_id = 0; Function init_variables () {if (termin_exists (‘main-cat’, ‘category’)) {main_cat_id = get_category_by_slg (‘main-cat)-> termin_id; }} function thook_into_wordpress () {add_action (‘pre_get_posts’, ‘pre_get_posts’); } Función pública pre_get_posts ($ query) {if (is_admin () && $ query-> is_main_query ()) { /*** Compruebe que la ID de categoría principal exista en el sitio, y luego verifique que estamos en la página de esa categoría ***/ if (term_exists (main_cat_id, ‘categoría’) && $ query-> is_category ($ main_cat_id)) {$ query-> set (‘Post_per_page’,-1); }}} Como probablemente note, aplicamos este código a una determinada categoría con cierta babosa, gat principal. Aunque este método no es ideal, porque si alguna vez queremos extender este comportamiento a otras categorías, tendremos que cambiar el código, iremos con este ejemplo simplificado; Una mayor flexibilidad nos llevaría más allá de la esfera de este artículo. Obtengamos las subcategorías y las publicaciones del post asignado en esta sección, crearemos una función que reciba una lista de subcategorías e ID de las publicaciones que pertenecen a cada subcategoría. Este desafío es doble: en primer lugar, cuando estamos en la página de categoría no tenemos datos sobre subcategorías, ni de la categoría (tiene subcategorías y, de ser así, quiénes son), ni de la publicación (Publica objetos, Almacenados en la variable Postes $ $, no tienen propiedad para atribuir a cualquier categoría). Si queremos información sobre subcategorías, incluso sobre los más triviales, como sus nombres, debemos recuperarlas de la base de datos.
Por lo tanto, nuestra única forma de obtener información sobre los subdirectores es tomar de DB una lista de las subcategorías principales de la categoría y para cada subcategoría mencionada: una lista de ID de publicación post-separados. Conquistaremos el primer desafío usando dos tablas: Wp_term_taxonomy y wp_terms. La tabla WP_Term_Taxonomy almacena información sobre las relaciones entre diferentes categorías, utilizando 2 columnas principales: Parent y Term_id. Por lo tanto, esta es la tabla que interrogaremos para averiguar qué subcategorías en la categoría principal y lo haremos enviando la ID de categoría principal como padre y seleccionando todos los términos, que son las ID de subcategoría, a la columna de los padres. es la ID de categoría principal. La tabla WP_terms contiene información sobre cada nombre de categoría, Slug, etc. Por lo tanto, utilizando los terminales que hemos tomado de la tabla WP_Term_Taxonomy, seleccionaremos los nombres de las subcategorías en la tabla WP_TERMS.
El segundo desafío requiere el uso de la tabla WP_Term_Relationships. Esta tabla tiene una columna Object_ID y una columna Termin_Taxonomy_ID, y cada fila representa una conexión entre un objeto (un archivo Post o Media o una entidad única en WordPress) y un término (podría ser una categoría, etiqueta o cualquier tipo de entidad de grupo ) atribuido a él. Por lo tanto, en teoría, podríamos interrogar esa tabla enviando las ID de subcategoría como Term_id y obtener todos los puestos que pertenecen a esa subcategoría. Sin embargo, esto nos proporcionaría un conjunto de datos de línea para cada subcategoría, que es más difícil de manejar. Por lo tanto, lo interrogaremos de tal manera que obtenga una fila en la subcategoría y esa fila tendrá una columna con una lista de publicaciones separadas. Un ejemplo de un conjunto de resultados de datos:
| enero | 238 | 451755, 450433, 452135, 4519911 , 451944, 452169 |
| febrero | 241 | 452295, 452421, 450619, 452410, 452402 |
| marzo | 233 | 451702, 448953, 451685, 445431 |
Para este propósito, usaremos el grupo de funciones de MySQL Para agrupar los Term_ids y también usaremos la función Group_concat que creará una lista de coma separada (o cualquier otro separador de elección) del object_IDS. Entonces, esta es la consulta que obtiene toda la información que necesitamos- (1) las ID de subcategoría principal de la categoría, (2) su nombre y (3) una lista de ID de publicación que pertenecen a cada categoría. Introduciremos una función llamada getChildCategories y postes: $ childCategories = $ wpdb-> get_results (”
Seleccione {$ wpdb-> prefix} término.name, {wpdb-> prefix} terms.term_id, group_concat ({wpdb-> prefix} term_relationhips.object_id separator ‘,’) como post_ids de {$ wpdb-> prefix} termin_taxonomy inner innerer inner unirse {$ wpdb-> prefix} term_relationships en {$ wpdb-> prefix} term_relations.term_taxonomy_id = {wpdb-> prefix} termaxonomy.term_id inner > Prefix} teraxonomy.term_id donde wp_term_taxonomy.parent = $ cat grupo por {$ wpdb-> prefix} término.id_id orden por {wpdb-> prefix} termas.name; “); para viajar fácilmente la lista de publicaciones de publicaciones, Convertiremos la lista en una matriz: foreach ($ childCategories como $ child_category) {$ child_category-> post_ids = explode (‘, $ child_category-> post_ids);} Si se pregunta si es absolutamente necesario escribir un sql personalizado consulta, si esta misión no se puede cumplir con las funciones de WordPress, permanecer en la fase: me acercaré al final de la publicación. 3. Llamando a la función D En un archivo de plantilla en esta sección, llamaremos a esa función en el archivo de plantilla que crearemos para esta categoría específica. Creemos un archivo PHP utilizando la Slug de categoría (por ejemplo, si el Slog de categoría es Cat principal, entonces nuestro nombre de archivo será Categoría-Main-CC.Php). WordPress utilizará este archivo cuando el usuario navegue en esta página de categoría (consulte los ejemplos de plantillas de categoría o la presentación visual de la jerarquía de plantillas). En este archivo, crearemos un elemento
cuyos elementos serán subcategorías.
El siguiente paso será pasar por el conjunto de datos de las subcategorías que recibimos de GetChildCategories y postes y mostrar los datos de sus publicaciones. Pero antes de que podamos hacer esto, tenemos que crear una función que extraiga la información de la matriz de $ publicaciones. 4. Extraemos la información sobre la publicación de las publicaciones que pintan cada iteración a través de una subcategoría tendrá una iteración vestida sobre las identificaciones de las publicaciones que les pertenecen. Utilizaremos esa ID de publicación para obtener la información relevante y mostrarla bajo el nombre actual de la subcategoría. ¿Cómo mostraremos la información de cada publicación de acuerdo con la identificación de la publicación? Como mencioné al comienzo de la publicación, el comportamiento predeterminado de la página de categoría es hacerse cargo de las publicaciones de categoría y almacenarlas en una matriz global llamada $ publicaciones. Por lo tanto, escribiremos una función a la que se transmite una ID de publicación y extraeremos la información a esa publicación de los $ publicaciones utilizando el método Array_Filter (). Otro método pequeño que usaremos es Array_Values () – Porque debido a que Array_Filter devuelve un elemento de matriz, pero no necesariamente con el índice 0, debemos llamar a Array_Values cuya tarea es devolver todos los valores de la matriz e índice de la matriz de la matriz de AT 0 crearemos esta función en la clase de categoría y la llamaremos getCurrentPostFromCategoryList. Luego lo llamaremos desde el archivo de plantilla de nuestra categoría principal, categoría-main-cat.php. Aquí está la función: función getCurrentPostFromCategoryList ($ post_id) {global $ publicaciones; $ ret = null; $ curr_post = array_filter ($ post, function ($ obj) use ($ post_id) {return $ obj-> id == $ post_id;}); $ curr_post = array_values ($ curr_post); If (count ($ curr_post)>

homefinance blog