Benutzerdefinierte Beitragstyp-Taxonomie entfernt Kategorie-Slug

Lesezeit: 4 Minuten

Benutzeravatar von Paul Moffatt
Paul Moffat

Ich habe einen benutzerdefinierten Beitragstyp „Shop“ mit einer benutzerdefinierten Taxonomie für Shop-Kategorien erstellt

Für meine Shop-Kategorie-Archivseiten möchte ich, dass die URL-Struktur wie folgt ist:

example.com/shop/tech/ (anstelle von example.com/shop/category/tech/)

Und ich möchte Shop-Posts haben example.com/shop/shop-post-title-example

Ich habe den folgenden Code ausprobiert und Permalinks gespeichert, aber wenn ich einen Shop-Beitrag besuche, wird ein 404-Fehler angezeigt.

Ist es möglich, die Kategoriebasis fehlerfrei zu entfernen?

// 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 );

Fankys Benutzeravatar
Fanky

Sie können die Kategoriebasis in benutzerdefinierten Taxonomie-URLs entfernen mit:

$args = array(

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

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

Und speichern Sie die Permalinks-Einstellungen erneut.

Jedoch, Dadurch werden Ihre (einfachen Beitragstypen) Beiträge auf 404 gesetzt, wenn Sie Permalinks darauf eingestellt haben Post name. Es scheint, dass Sie nicht sowohl benutzerdefinierte Taxonomie als auch Beiträge im Stammverzeichnis haben können. Daher würden Sie zu den Permalinks-Einstellungen gehen und festlegen Custom structure z.B /blog/%postname%/.

Ein Nebeneffekt ist, dass Ihre CPTs auch diese “Front” haben würden, z blog/yourcustomtype. Das kannst du mit loswerden 'with_front' => false in Ihrer Produkttypregistrierung:

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

Gefunden hier.

Benutzeravatar von Pedro1970
Pedro1970

Soweit ich weiß, müssten Sie zuerst Vorlagendateien (entsprechende PHP-Dateien) erstellen, um den benutzerdefinierten Beitragstyp und/oder seine Kategorieseite anzuzeigen. Vorlagendateien ziehen Ihre Beiträge und zeigen sie an.

Um beispielsweise Ihre Kategorien “shop_category” anzuzeigen, könnten Sie eine Datei namens “taxonomy-shop_category.php” erstellen.
Wenn Sie eine Vorlage speziell für die Shop-Kategorie „Tech“ erstellen möchten, können Sie eine Datei mit dem Namen „taxonomy-shop_category_tech.php“ erstellen.
Es gibt eine Hierarchie von Vorlagen: https://wphierarchy.com/
Auch mehr über Vorlagen: https://developer.wordpress.org/themes/template-files-section/taxonomy-templates/

Schöner Artikel über Taxonomien für benutzerdefinierte Beitragstypen: https://code.tutsplus.com/tutorials/taxonomy-archives-list-posts-by-post-type–cms-20340

Vorlagendateien sollten in Ihrem WordPress-Theme-Ordner (oder Child-Theme-Ordner) abgelegt werden.
!wichtig. Vergessen Sie nicht, Ihre Permalinks zu aktualisieren. Gehen Sie zu /wp-admin/options-permalink.php und klicken Sie auf „Änderungen speichern“.

Hier ist ein Beispiel für eine einfache Vorlagendatei:

<?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();

  • Danke, aber ich frage nicht nach Vorlagendateien, ich frage nach dem Entfernen der Kategoriebasis in benutzerdefinierten Taxonomie-URLs

    – Paul Moffatt

    21. Februar 2021 um 12:38 Uhr

1434640cookie-checkBenutzerdefinierte Beitragstyp-Taxonomie entfernt Kategorie-Slug

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy