首页 文章

WordPress自定义分类法显示404

提问于
浏览
0

我在WordPress中创建了一个名为“Found”的自定义帖子类型 . 在其中,我创建了两个分类法,“Pets”(名为petsfound)和“Electronics”(名为electronicsfound),这两个分类法都有各种术语 .

如果我查看在网站上使用分类术语的帖子,它们会正确显示,但是,尝试查看分类法的帖子列表会显示404.因此,会发生以下情况:

https://example.com/found/pets-found/显示404页面 .

https://example.com/found/pets-found/dog显示了宠物发现分类中的狗列表 .

我已经使用archive.php和taxonomy-petsfound.php进行了测试,但两者都显示了分类法的404 . 电子分类也是如此 .

以下是“Found”CPT和“petsfound”分类标准的代码:

function found_custom_post_type() {
    $labels = array(
        'name'                  => _x( 'Found Items', 'Post Type General Name', 'lost_and_found' ),
        'singular_name'         => _x( 'Found', 'Post Type Singular Name', 'lost_and_found' ),
        'menu_name'             => __( 'Found', 'lost_and_found' ),
        'name_admin_bar'        => __( 'Found', 'lost_and_found' ),
        'archives'              => __( 'Item Archives', 'lost_and_found' ),
        'parent_item_colon'     => __( 'Parent Item:', 'lost_and_found' ),
        'all_items'             => __( 'All Items', 'lost_and_found' ),
        'add_new_item'          => __( 'Add New Item', 'lost_and_found' ),
        'add_new'               => __( 'Add New', 'lost_and_found' ),
        'new_item'              => __( 'New Item', 'lost_and_found' ),
        'edit_item'             => __( 'Edit Item', 'lost_and_found' ),
        'update_item'           => __( 'Update Item', 'lost_and_found' ),
        'view_item'             => __( 'View Item', 'lost_and_found' ),
        'search_items'          => __( 'Search Item', 'lost_and_found' ),
        'not_found'             => __( 'Not found', 'lost_and_found' ),
        'not_found_in_trash'    => __( 'Not found in Trash', 'lost_and_found' ),
        'featured_image'        => __( 'Featured Image', 'lost_and_found' ),
        'set_featured_image'    => __( 'Set featured image', 'lost_and_found' ),
        'remove_featured_image' => __( 'Remove featured image', 'lost_and_found' ),
        'use_featured_image'    => __( 'Use as featured image', 'lost_and_found' ),
        'insert_into_item'      => __( 'Insert into item', 'lost_and_found' ),
        'uploaded_to_this_item' => __( 'Uploaded to this item', 'lost_and_found' ),
        'items_list'            => __( 'Items list', 'lost_and_found' ),
        'items_list_navigation' => __( 'Items list navigation', 'lost_and_found' ),
        'filter_items_list'     => __( 'Filter items list', 'lost_and_found' ),
    );
    $args = array(
        'label'                 => __( 'Found', 'lost_and_found' ),
        'description'           => __( 'Found Post Type', 'lost_and_found' ),
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', 'author', 'thumbnail', 'revisions', 'custom-fields', ),
        'taxonomies'            => array( 'petsfound', 'electronicsfound', 'countyfound' ),
        'hierarchical'          => false,
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 5,
        'show_in_admin_bar'     => true,
        'show_in_nav_menus'     => true,
        'rewrite'               => true,
        'can_export'            => true,
        'has_archive'           => true,        
        'exclude_from_search'   => false,
        'publicly_queryable'    => true,
        'capability_type'       => 'page',
    );
    register_post_type( 'found', $args );
}
add_action( 'init', 'found_custom_post_type', 5 );
}
function found_taxonomies_pets() {
    $labels = array(
        'name'              => _x( 'Pets', 'taxonomy general name' ),
        'singular_name'     => _x( 'Pet', 'taxonomy singular name' ),
        'search_items'      => __( 'Search Pets' ),
        'all_items'         => __( 'All Pets' ),
        'parent_item'       => __( 'Parent Pets' ),
        'parent_item_colon' => __( 'Parent Pet:' ),
        'edit_item'         => __( 'Edit Pet' ), 
        'update_item'       => __( 'Update Pet' ),
        'add_new_item'      => __( 'Add New Pet' ),
        'new_item_name'     => __( 'New Pet' ),
        'menu_name'         => __( 'Pets' ),
    );
    $args = array(
        'labels' => $labels,
        'hierarchical' => true,
        'rewrite'      => array( 'slug' => 'found/pets-found', 'with_front' => true ),
        'show_admin_column' => true,
        //'has_archive' => true

    );
    register_taxonomy( 'petsfound', 'found', $args );
    flush_rewrite_rules();
}
add_action( 'init', 'found_taxonomies_pets', 1 );
  • 我已多次重置永久链接 .

  • 我已经测试了将 hierarchicalwith_front 值从true修改为false,如果它们有任何影响,则再次返回 .

  • 我在404.php模板上运行了 print_r($wp_query); ,并在query_vars的开头收到以下内容:

[query_vars] => Array ( [page] => 0 [found] => pets-found [post_type] => found [name] => pets-found

不知道还有什么可以看,所以希望有人可以提供帮助 .

干杯

达米安

Edit - Adding the code for taxonomy-petsfound.php

<?php
/**
 * The template for displaying Pets Found Taxonomy.
 *
 * Learn more: http://codex.wordpress.org/Template_Hierarchy
 *
 * @package dazzling
 */

get_header(); ?>



<div class="breadcrumb" typeof="BreadcrumbList" vocab="http://schema.org/">
    <?php if(function_exists('bcn_display'))
    {
        bcn_display();
    }?>
</div>
<?php print_r($wp_query); ?>
        <section id="primary" class="content-area col-sm-12 col-md-12 <?php echo of_get_option( 'site_layout' ); ?>">
            <main id="main" class="site-main" role="main">

            <?php if ( have_posts() ) : ?>

                <header class="page-header">
                    <h1 class="page-title">
                        Found Items 2
                    </h1>
                    <?php
                        // Show an optional term description.
                        $term_description = term_description();
                        if ( ! empty( $term_description ) ) :
                            printf( '<div class="taxonomy-description">%s</div>', $term_description );
                        endif;
                    ?>
                </header><!-- .page-header -->

                <?php /* Start the Loop */ ?>
                <?php while ( have_posts() ) : the_post(); ?>

                    <?php
                        /* Include the Post-Format-specific template for the content.
                         * If you want to override this in a child theme, then include a file
                         * called content-___.php (where ___ is the Post Format name) and that will be used instead.
                         */
                        get_template_part( 'content', get_post_format() );
                    ?>

                <?php endwhile; ?>

                <?php dazzling_paging_nav(); ?>

            <?php else : ?>

                <?php get_template_part( 'content', 'none' ); ?>

            <?php endif; ?>

            </main><!-- #main -->
        </section><!-- #primary -->


<?php get_footer(); ?>

2 回答

  • 0

    对于帖子类型和分类法的重写规则,有时其他规则在您喜欢的规则之前匹配 . 也许来自帖子或页面slu ..即使它是垃圾中的一个 .

    尝试查看所有重写规则,并查看与您的网址请求相匹配的内容 . 您可能需要更改创建帖子类型或分类的顺序 . 尝试在帖子类型之前注册您的分类 .

    您可以使用此代码段查看匹配的重写规则:

    function debug_rewrite_rules() {
        global $wp, $template, $wp_rewrite;
    
        echo '<pre>';
        echo 'Request: ';
        echo empty($wp->request) ? "None" : esc_html($wp->request) . PHP_EOL;
        echo 'Matched Rewrite Rule: ';
        echo empty($wp->matched_rule) ? None : esc_html($wp->matched_rule) . PHP_EOL;
        echo 'Matched Rewrite Query: ';
        echo empty($wp->matched_query) ? "None" : esc_html($wp->matched_query) . PHP_EOL;
        echo 'Loaded Template: ';
        echo basename($template);
        echo '</pre>' . PHP_EOL;
    
        echo '<pre>';
        print_r($wp_rewrite->rules);
        echo '</pre>';
    }
    
    add_action( 'wp_head', 'debug_rewrite_rules' );
    
  • 2

    据我所知,如果你添加自定义分类法,你可以访问产品列表或任何你想要的东西,如上所述传递参数,如果你访问列表,你必须使用如下所示的参数:

    https://example.com/found/pets-found/dog这会给你结果,因为这里的狗是参数,你得到了狗列表 .

    要么

    $custom_terms = get_terms('custom_taxonomy');
    foreach($custom_terms as $custom_term) {
    wp_reset_query();
    $args = array('post_type' => 'custom_post_type',
        'tax_query' => array(
            array(
                'taxonomy' => 'custom_taxonomy',
                'field' => 'slug',
                'terms' => $custom_term->slug,
            ),
        ),
     );
    
     $loop = new WP_Query($args);
     if($loop->have_posts()) {
        echo '<h2>'.$custom_term->name.'</h2>';
    
        while($loop->have_posts()) : $loop->the_post();
            echo '<a href="'.get_permalink().'">'.get_the_title().'</a><br>';
        endwhile;
     }
    }
    

    希望对你有帮助

相关问题