Plantillas para tipos de publicaciones personalizados y taxonomías personalizadas

4

Estoy trabajando en un tema personalizado para una red de sitios que se implementan bajo una instalación de WordPress MultiSite .

Dentro de este tema, creo 4 tipos de publicaciones personalizadas que tienen dos taxonomías agregadas a todas ellas. La primera taxonomía es el post_tag one y la otra es una taxonomía personalizada que se parece al category one.

Elegí que todos mis 4 tipos de publicación personalizados tengan su propia categoría de taxonomía porque no quería que ninguna categoría sangrara dentro de los tipos de publicación.

Aquí está mi código:

<?php
function o_post_types()
{
    $post_types = array(
        'articole' => array(
            'name' => 'Articole',
            'single' => 'Articol',
            'icon' => 'dashicons-admin-post'
        ),
        'evenimente' => array(
            'name' => 'Evenimente',
            'single' => 'Eveniment',
            'icon' => 'dashicons-video-alt'
        ),
        'concursuri' => array(
            'name' => 'Concursuri',
            'single' => 'Concurs',
            'icon' => 'dashicons-awards'
        ),
        'fotografii' => array(
            'name' => 'Fotografii',
            'single' => 'Fotografie',
            'icon' => 'dashicons-format-image'
        ),
        'promotii' => array(
            'name' => 'Promoții',
            'single' => 'Promoție',
            'icon' => 'dashicons-share'
        )
    );

    foreach ($post_types as $post_type) {
        $icon = $post_type['icon'];
        $name_lower = strtolower($post_type['name']);
        $single_lower = strtolower($post_type['single']);
        if ($post_type['name'] == 'Promoții') {
            $name_lower = 'promotii';
            $single_lower = 'promotie';
        }
        $labels = array(
            'name' => $post_type['name'],
            'singular_name' => $post_type['single'],
            'add_new' => 'Adaugă ' . $single_lower,
            'add_new_item' => 'Adaugă ' . $single_lower . ' nou',
            'edit_item' => 'Editează ' . $single_lower,
            'new_item' => $post_type['single'] . ' nou',
            'all_items' => 'Listă ' . $name_lower,
            'view_item' => 'Afișează ' . $single_lower,
            'search_items' => 'Caută în ' . $name_lower,
            'not_found' => 'Nici un ' . $single_lower . ' găsit.',
            'not_found_in_trash' => 'Nici un ' . $single_lower . ' găsit în Gunoi.',
            'parent_item_colon' => '',
            'menu_name' => $post_type['name']
        );

        $args = array(
            'labels' => $labels,
            'public' => true,
            'publicly_queryable' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'query_var' => true,
            'rewrite' => array('slug' => $name_lower, 'with_front' => false),
            'capability_type' => 'post',
            'has_archive' => true,
            'hierarchical' => false,
            'menu_position' => 5,
            'supports' => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments'),
            'taxonomies' => array('post_tag'),
            'menu_icon' => $icon
        );
        register_post_type("cpt_" . $single_lower, $args);

        $labels = array(
            'name' => 'Categorii',
            'singular_name' => 'Categorie',
            'search_items' => 'Caută Categorii',
            'all_items' => 'Toate Categoriile',
            'parent_item' => 'Categorie Părinte',
            'parent_item_colon' => 'Categorie Părinte:',
            'edit_item' => 'Modifică Categorie',
            'update_item' => 'Actualizează Categorie',
            'add_new_item' => 'Adaugă Categorie nouă',
            'new_item_name' => 'Numele noii categorii',
            'menu_name' => 'Categorii',
        );
        $args = array(
            'hierarchical' => true,
            'labels' => $labels,
            'show_ui' => true,
            'show_admin_column' => true,
            'query_var' => true,
            'rewrite' => array(
                'hierarchical' => true,
                'slug' => $name_lower,
                'with_front' => false
            ),
        );
        register_taxonomy("tax_" . $name_lower, "cpt_" . $single_lower, $args);
    }
}

EDIT 1 *

Los nombres de los archivos son los siguientes:

  • taxonomy-articole.php
  • taxonomy-concursuri.php
  • taxonomy-evenimente.php
  • taxonomy-fotografii.php
  • taxonomy-promotii.php

Estoy tratando de mostrar una lista como vista de categoría de todos los cpt s que tienen ese término. Por ejemplo: a cpt_evenimente (o cpt_events en inglés) tendrá un tax_evenimente término (o tax_events en inglés) así:

Skate-park skateboard showoff cpt habrá asignado un Evento al aire libre term y tendrá que mostrarse debido a su término en el taxonomy-evenimente.php bucle.

El problema es que las plantillas para cada taxonomía no se cargan. ¿Qué hay que hacer?

    
pregunta aifrim 14.08.2014 - 19:15

1 respuesta

5

Te has perdido totalmente la convención de nombres al acceder a las páginas del archivo de taxonomía , y lo más probable es que tu mismo páginas de archivo para sus tipos de publicaciones personalizadas

Aquí es cómo deben verse las páginas de archivo de taxonomía

  • taxonomy- {taxonomy} - {term} .php - Si la taxonomía fuera sometax , y el término taxonomía fuera someterm WordPress buscaría taxonomy-sometax-someterm.php . En el caso de formatos de publicación, la taxonomía es post_format y los términos son post_format-{format} . es decir, taxonomy-post_format-post-format-link.php

  • taxonomy- {taxonomy} .php : si la taxonomía fuera sometax , WordPress buscará taxonomy-sometax.php

  • taxonomy.php

  • archive.php

  • index.php

Por lo tanto, todas sus plantillas de taxonomía deben llamarse taxonomy-tax_{$name_lower}.php donde $name_lower es el nombre asignado a la variable.

Otro problema que mencioné en mis comentarios a tus publicaciones fue

  

No uses guiones en tus nombres, usa guiones bajos para separar palabras

Esta es ahora la oportunidad de probar sus nombres con y sin guiones y ver cómo afecta eso a cómo se usan sus plantillas.

Ejemplo:

Si crea el nombre de su taxonomía tax-mytax y crea una plantilla taxonomy-tax-mytax.php , notará que esto no funcionará, ya que wordpress lee su plantilla de la siguiente manera: tax es su nombre de taxonomía y mytax es un término

Una última cosa, y no sé si la omitiste intencionalmente, pero tu función debería estar conectada al init hook

EDIT 1

También es otro punto sobre buenas prácticas, escriba sus argumentos en inglés y hágalos traducibles. Alguien que hable un idioma diferente al tuyo tendrá dificultades para entender qué significan las etiquetas, como sería mi caso :-). Esta es también la única razón por la que su función debe estar conectada a init para que los traductores estén disponibles

EDIT 2

Parece que tus reglas de reescritura están causando tu problema. De lo que se discutió en el chat,

  

Tengo una taxonomía llamada tax_evenimente . Es una taxonomía similar a una categoría. Tengo un término Alte Evenimente con el slug alte-evenimente . site.com/evenimente/alte-evenimente debe mostrarse con taxonomy.php .

Sí, eso es lo que debería suceder con su regla de reescritura, pero se mantiene en 404 ing.

< --- SECCIÓN SCRAPPED --- >

EDIT 3

He encontrado un excelente complemento para ayudar con las reglas de reescritura para tus tipos de publicaciones personalizadas. Se llama Permalinks personalizados de tipo de publicación ( NOTA: No tengo ninguna afiliación con el complemento ). Como su código se encuentra actualmente, déjelo en su lugar

Así es como funciona todo:

( En aras de los ejemplos, voy a utilizar cpt_evenimente y tax_evenimente )

  • Descargue e instale el plugin

  • Vaya a la página de configuración de los enlaces permanentes y desplácese hasta la configuración de sus tipos de publicaciones personalizadas. Así es como se verá

  • Cambie/%postname%/a/%year%/%monthnum%/%postname%/paraobtenerlaURLdeseada

  • Guardatusenlacespermanentes

Ahora,paralaspruebas

  • site.com/evenimente/alte-evenimente/Muestraelarchivodetaxonomíaparalostérminosdetaxonomíatax_evenimenteentaxonomy-tax_evenimente.php

  • site.com/evenimente/Muestraelarchivodetipodepublicaciónpersonalizadoparaeltipodepublicaciónpersonalizadacpt_evenimente

  • site.com/evenimente/2014/10/testing-posts-1/Muestralapublicaciónúnicatestingpost1

Solounanota,lacasilladeverificación"Usar enlace permanente de archivo de taxonomía personalizado" debería estar desactivada

Espero que esto sea lo que necesitas.

    
respondido por el Pieter Goosen 13.10.2014 - 20:30

Lea otras preguntas en las etiquetas