Taxonomía de tipo de publicación personalizada eliminar categoría slug

4 minutos de lectura

Avatar de usuario de Paul Moffatt
Pablo Moffatt

Creé un tipo de publicación personalizada ‘Tienda’ con una taxonomía personalizada para las categorías de la tienda

Para las páginas de archivo de la categoría de mi tienda, quiero que la estructura de URL sea:

ejemplo.com/shop/tech/ (en lugar de ejemplo.com/tienda/categoría/tecnología/)

Y quiero que las publicaciones de la tienda sean ejemplo.com/shop/shop-post-title-example

Probé el código a continuación y guardé los enlaces permanentes, pero cuando visito una publicación de la tienda, muestra un error 404.

¿Es posible eliminar la categoría base sin errores?

// Custom Post Type : Shop  
function my_custom_post_shop() {
  $labels = array(
    'name'               => _x( 'Shop', 'post type general name' ),
    'singular_name'      => _x( 'Product', 'post type singular name' ),
    'add_new'            => _x( 'Add New', 'Product' ),
    'add_new_item'       => __( 'Add New' ),
    'edit_item'          => __( 'Edit' ),
    'new_item'           => __( 'New Product' ),
    'all_items'          => __( 'All Products' ),
    'view_item'          => __( 'View Product' ),
    'search_items'       => __( 'Search Products' ),
    'not_found'          => __( 'No projects found' ),
    'not_found_in_trash' => __( 'No projects found in the Trash' ), 
    'menu_name'          => 'Shop'
  );
  $args = array(
        'label'               => __( 'Shop' ),
        'labels'              => $labels,
        'supports'            => array( 'title', 'editor', 'excerpt', 'author', 'comments', 'revisions', 'custom-fields', 'thumbnail', ),
        'hierarchical'        => false,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'show_in_nav_menus'   => true,
        'show_in_admin_bar'   => true,
        'menu_position'       => 5,
        'can_export'          => true,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
        'rewrite' => array( 'slug' => 'shop' ),
        'has_archive' => 'shop',
  );
  register_post_type( 'shop', $args ); 
}
add_action( 'init', 'my_custom_post_shop' );

// Shop Categories
function my_taxonomies_shop() {
  $labels = array(
    'name'              => _x( 'Shop Categories', 'taxonomy general name' ),
    'singular_name'     => _x( 'Shop Category', 'taxonomy singular name' ),
    'search_items'      => __( 'Search Categories' ),
    'all_items'         => __( 'All Categories' ),
    'parent_item'       => __( 'Parent Category' ),
    'parent_item_colon' => __( 'Parent Category:' ),
    'edit_item'         => __( 'Edit Category' ), 
    'update_item'       => __( 'Update Category' ),
    'add_new_item'      => __( 'Add New Category' ),
    'new_item_name'     => __( 'New Category' ),
    'menu_name'         => __( 'Shop Categories' ),
  );
  $args = array(
    'labels' => $labels,
    'hierarchical' => true,
    'show_admin_column' => true,
    'rewrite' => array( 'slug' => 'shop'),
  );
  register_taxonomy( 'shop_category', 'shop', $args );
}
add_action( 'init', 'my_taxonomies_shop', 0 );

Avatar de usuario de Fanky
extravagante

Puede eliminar la base de categoría en las URL de taxonomía personalizada con:

$args = array(

    'rewrite' => array( 'slug' => "https://stackoverflow.com/", 'with_front' => false),

    /* ...(other args)... */
);
register_taxonomy( 'shop_category', 'shop', $args );

Y vuelva a guardar la configuración de Permalinks.

Sin embargo, esto hará que sus publicaciones (tipo de publicación básica) sean 404, si tiene enlaces permanentes configurados en Post name. Parece que no puede tener tanto la taxonomía personalizada como las publicaciones en la raíz. Por lo tanto, iría a la configuración de Permalinks y establecería Custom structure p.ej /blog/%postname%/.

Un efecto secundario es que sus CPT también tendrían este “frente”, por ejemplo blog/yourcustomtype. Puedes deshacerte de esto con 'with_front' => false en su registro de tipo de producto:

register_post_type( 'yourcustomtype',  array(
           'rewrite' => array(
                'slug' => 'yourcustomurl',
                'with_front' => false
            ),
            /* ... */
));

Fundar aquí.

Avatar de usuario de Pedro1970
Pedro1970

Hasta donde yo sé, para mostrar el tipo de publicación personalizada y/o su página de categoría, primero debe crear archivos de plantilla (archivos PHP correspondientes). Los archivos de plantilla extraerían sus publicaciones y las mostrarían.

Por ejemplo, para mostrar sus categorías “shop_category” podría crear un archivo llamado “taxonomy-shop_category.php”.
Si desea crear una plantilla específicamente para la categoría de tienda “tecnología”, puede crear un archivo llamado “taxonomy-shop_category_tech.php”.
Hay una jerarquía de plantillas: https://wphierarchy.com/
También más sobre plantillas: https://developer.wordpress.org/themes/template-files-section/taxonomy-templates/

Buen artículo sobre taxonomías de tipos de publicaciones personalizadas: https://code.tutsplus.com/tutorials/taxonomy-archives-list-posts-by-post-type–cms-20340

Los archivos de plantilla deben colocarse en su carpeta de temas de WordPress (o carpeta de temas secundarios)
!importante. No olvides actualizar tus enlaces permanentes. Vaya a /wp-admin/options-permalink.php y haga clic en “Guardar cambios”.

Aquí hay un ejemplo de un archivo de plantilla simple:

<?php
if ( ! defined( 'ABSPATH' ) ) { exit; }
?>
 
<?php get_header(); 
$term = get_queried_object();

$args = array(
    'post_type' => 'shop',
    'shop-category' => $term->slug
);
$query = new WP_Query( $args );

?>
 <header class="archive-header">
    <h1 class="archive-title">
        <?php echo $term->name; ?>
    </h1>
</header>
        <div id="content">
                 <?php
                 if ($query->have_posts()) {
                         
                    echo'<h2>Your shop category name ' . $term->name . '</h2>';
                     
                    echo '<ul>';
                     
                        while ( $query->have_posts() ) : $query->the_post(); ?>
                 
                        <li id="post-<?php the_ID(); ?>">
                            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                        </li>
                         
                        <?php endwhile;
                         
                        echo '</ul>';
                         
                } 
                     
                wp_reset_postdata();
                ?>             
             
        </div><!-- #content -->

<?php
get_footer();

  • Gracias, pero no estoy preguntando sobre los archivos de plantilla, estoy preguntando sobre la eliminación de la base de categorías en las URL de taxonomía personalizadas.

    –Paul Moffatt

    21 de febrero de 2021 a las 12:38

¿Ha sido útil esta solución?