Página no encontrada en taxonomía de tipo de entrada personalizada

23 ene 2015, 05:26:10
Vistas: 20.6K
Votos: 4

He creado un tipo de entrada personalizada con taxonomías y cuando voy a la página de taxonomía y veo una de las taxonomías obtengo un error de página no encontrada como si la taxonomía no se hubiera creado.

¿Alguna sugerencia?

/*Productos*/
$labels = array(
    'name' => _x('Productos', 'nombre general del tipo de entrada'),
    'singular_name' => _x('Producto', 'nombre singular del tipo de entrada'),
    'add_new' => _x('Añadir Nuevo', 'Producto'),
    'add_new_item' => __("Añadir Nuevo Producto"),
    'edit_item' => __("Editar Producto"),
    'new_item' => __("Nuevo Producto"),
    'view_item' => __("Ver Producto"),
    'search_items' => __("Buscar Producto"),
    'not_found' =>  __('No se encontraron productos'),
    'not_found_in_trash' => __('No se encontraron productos en la Papelera'), 
    'parent_item_colon' => ''
  );

$args = array(
    'labels' => $labels,
        'singular_label' => __('Productos'),
        'public' => true,
        'show_ui' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'rewrite' => true,
        'query_var' => 'products',
        'taxonomies' => array('products-cat'),
        'supports' => array('title', 'editor', 'custom-fields', 'thumbnail', 'excerpt'),
        'has_archive' => true,
);
register_post_type( 'products' , $args );

// Añadir a la función admin_init
add_filter('manage_edit-products_columns', 'add_new_products_columns');
function add_new_products_columns($columns) {
$columns = array(
    'cb' => '<input type="checkbox" />',
        'images' => 'Imágenes',
    'title' => 'Nombre del Producto',
        'author' => 'Autor',
        'product-categories' => 'Categorías',
        'tags' => 'Etiquetas',
        'date' => 'Fecha',
); 
    return $columns;
}

add_action('manage_products_posts_custom_column', 'manage_products_columns', 10, 2);

function manage_products_columns($column_name, $id) {
    global $wpdb;
    switch ($column_name) {

    case 'images':
            //echo get_the_post_thumbnail( $page->ID, array(50,50) ); 
    break;

    case 'product-categories':
        echo get_the_term_list($post->ID, 'products-cat', '', ', ','');
    break;

        default:
        break;
    } 
}

add_action( 'init', 'products_create_taxonomies', 0 );

function products_create_taxonomies() 
{
    // Categorías de Fotos
    register_taxonomy('products-cat',array('products'),array(
        'hierarchical' => true,
        'label' => 'Categorías de Productos',
        'singular_name' => 'Categoría de Productos',
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'products' )
    ));
}

/*Fin Productos*/

Tengo esto en mi página de archivos

archive-products.php

<?php get_header(); ?>

<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post();?>
                <?php the_title(); ?>   
<?php endwhile; endif; ?>
0
Todas las respuestas a la pregunta 4
3
17

Me encontré con el mismo problema en mi plataforma local con nginx. Después de actualizar los enlaces permanentes en la configuración, todo funcionó correctamente. Configuración > Enlaces permanentes > Guardar cambios (sin modificación)

16 feb 2017 14:09:43
Comentarios

Prueba esta solución sugerida antes de hacer cualquier otra cosa. Básicamente funciona para mí siempre.

Braza Braza
21 jul 2020 13:12:19

Wordpress es tan estúpido.

serraosays serraosays
14 oct 2020 00:41:54

Lo intenté más de 10 veces pero no funciona para mí. Muestra una página no encontrada.

questionbank questionbank
4 jul 2021 19:56:23
1

Después de investigar un poco, encontré un blog que en realidad tenía una respuesta a este problema.

Aquí está la función junto con la url del blog.

function taxonomy_slug_rewrite($wp_rewrite) {
    $rules = array();
    // obtener todas las taxonomías personalizadas
    $taxonomies = get_taxonomies(array('_builtin' => false), 'objects');
    // obtener todos los tipos de contenido personalizados
    $post_types = get_post_types(array('public' => true, '_builtin' => false), 'objects');

    foreach ($post_types as $post_type) {
        foreach ($taxonomies as $taxonomy) {

            // revisar todos los tipos de contenido asignados a esta taxonomía
            foreach ($taxonomy->object_type as $object_type) {

                // verificar si la taxonomía está registrada para este tipo de contenido
                if ($object_type == $post_type->rewrite['slug']) {

                    // obtener objetos de categoría
                    $terms = get_categories(array('type' => $object_type, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0));

                    // crear reglas
                    foreach ($terms as $term) {
                        $rules[$object_type . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug;
                    }
                }
            }
        }
    }
    // combinar con reglas globales
    $wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_filter('generate_rewrite_rules', 'taxonomy_slug_rewrite');
23 ene 2015 11:13:42
Comentarios

URL del blog no funciona

questionbank questionbank
4 jul 2021 19:57:03
0

Recomendaría al menos dos cosas:

  1. Cambia la prioridad para tu acción products_create_taxonomies al menos a 1, si no a 5 o más. (Creo que 0 no es válido para prioridades de acciones por alguna razón)

  2. Añade la creación de tu tipo de post dentro de una acción init, igual que hiciste con tus taxonomías, pero con una prioridad anterior a tu taxonomía (ya que las estás conectando mediante la taxonomía).

Si esos dos cambios no lo solucionan, intenta configurar ambos (sin enlazarlos mediante sus propias estructuras) y luego llama lo siguiente en una prioridad posterior (todavía durante init):

register_taxonomy_for_object_type( 'products-cat', 'products' );

Eso debería asegurar que estén completamente y correctamente enlazados.

23 ene 2015 06:14:53
5

Creo que tu principal problema aquí es la reescritura para tu taxonomía. Tal como está, tu reescritura para la taxonomía se ve así:

'rewrite' => array('slug' => 'products' )

Esto es exactamente lo que significa esta reescritura en tu tipo de contenido personalizado. Lo siguiente:

'rewrite' => true,

se traduce a esto en tu tipo de contenido personalizado:

'rewrite' => array('slug' => 'products' )

Por defecto, este conflicto en las reescrituras hará que las solicitudes de tu taxonomía devuelvan un error 404. Como solución, puedes cambiar la reescritura para tu taxonomía, o echar un vistazo a esta publicación que hice recientemente en este sitio sobre una mejor alternativa para esto.

Importante: Vacía tus enlaces permanentes después de cada actualización en tu código para reiniciar tus enlaces permanentes con la nueva estructura.

23 ene 2015 08:53:03
Comentarios

eso lo solucionó pero el nombre del slug cambió a la taxonomía registrada que es products-cat. ¿Cómo puedo mantener el rewrite en true mientras conservo el nombre del slug como products?

Jeremy Love Jeremy Love
23 ene 2015 09:05:27

¿Has revisado el post enlazado? Los slugs de rewrite iguales para ambos custom post types y taxonomías personalizadas siempre son problemáticos para que funcionen. Si no me falla la memoria, el usuario que publicó la pregunta que respondí hizo un post sobre ese mismo problema. Solo revisa sus publicaciones también.

Pieter Goosen Pieter Goosen
23 ene 2015 09:09:59

Ok revisé el post que recomendaste y cambié de usar guiones a guiones bajos y descargué el plugin de permalinks. Y después de hacer estos cambios me di cuenta que cambiar el rewrite en el código de lo que tengo a ponerlo en true no es lo mismo. Cuando lo pongo en true hace que la URL sea igual al nombre de la taxonomía registrada. La URL también muestra el nombre del custom post type y el nombre de la taxonomía registrada, por ejemplo products/products-cat/automotive/. ¿Alguna sugerencia?

Jeremy Love Jeremy Love
23 ene 2015 10:20:10

Para ser honesto, esto es lo más que puedo ayudarte, desafortunadamente. Francamente, con las reescrituras, estamos en el mismo barco :-). Sé que tener las mismas URLs para páginas de taxonomía y archivos de tipos de contenido personalizados es posible con reglas de reescritura adicionales. Creo que con una regla de reescritura personalizada, puedes eliminar el nombre de la taxonomía en la estructura de URL del comentario anterior que publicaste. Desafortunadamente, no he investigado cómo hacer algo así yo mismo. Espero que resuelvas esto, y si lo haces, por favor publica tu solución y acepta tu propia respuesta. Esto será realmente útil para futuros usuarios.

Pieter Goosen Pieter Goosen
23 ene 2015 10:42:36

Gracias, continuaré buscando una solución y publicaré aquí cuando encuentre una respuesta.

Jeremy Love Jeremy Love
23 ene 2015 10:44:43