【问题标题】:Custom Taxonomy Links For Custom Post Types Not Working自定义帖子类型的自定义分类链接不起作用
【发布时间】:2013-04-17 11:50:24
【问题描述】:

我已经设置了自定义帖子类型和自定义分类。然后我将分类列表显示为一组链接,这样如果有人点击该链接,它应该会显示该分类下的所有帖子。目前这不起作用。它不断将我带到 404 页面,并显示“这有点尴尬,不是吗?”消息。

代码如下:

FUNCTIONS.PHP

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

function build_taxonomies() {
    register_taxonomy( 'companies', 'companies', array( 'hierarchical' => true, 'label' => 'Company Categories', 'query_var' => true, 'rewrite' => true ) );
}

add_action('init', 'register_mypost_type');
function register_mypost_type() {
  register_post_type('companies',array(
    'labels' => array(
      'name' => 'Companies',
      'singular_name' => 'Company',
      'add_new' => 'Add New Company',
      'add_new_item' => 'Add New Company',
      'edit_item' => 'Edit Company',
      'new_item' => 'Add New Company',
      'view_item' => 'View Company',
      'search_items' => 'Search Companies',
      'not_found' => 'No companies found',
      'not_found_in_trash' => 'No companies found in trash'
    ),   
    'public' => true,
    'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt'),
    'capability_type' => 'post',
    'rewrite' => array('slug' => 'companies'),
    'taxonomies' => array('category'),
    'menu_position' => 7,
    'has_archive' => true,
    'hierarchical' => false
  ));
 }

然后在另一个名为“page-company.php”的页面上,我使用以下代码将分类列表输出为链接:

<?php
$args = array( 'taxonomy' => 'companies' );
wp_list_categories( $args );
?>

当我将鼠标悬停在其中一个链接上时,URL 显示为:

'http://localhost:81/?companies=graphic-design'

平面设计是我添加到自定义分类中的类别之一。

但是点击这个链接总是会把我带到 404 页面。

我已经建立了一个名为archive-companies.php 的档案页面,我认为所有这些都可以解决问题。

任何人都可以提供任何帮助,我们将不胜感激。

提前致谢。

【问题讨论】:

  • 如果你切换到 pretty 永久链接,你会得到 404 吗?
  • @DavidChase 感谢您的回复。是的,如果我进行切换,我仍然会得到 404 页面。
  • 可能值得注意的是,如果我将新添加的分类法中的新创建类别添加到 Wordpress 中帖子默认存在的默认“类别”分类法中,那么它会很有效。显然我想有单独的,但我认为这可能是我的问题的一部分?
  • 你有 wp 调试吗?

标签: wordpress custom-taxonomy


【解决方案1】:

OMG OMG OMG ... 在阅读了有关如何解决问题、使用重写规则和使用永久链接重写代码的帖子数天之后,您的解决方案是唯一一个完美运行的解决方案! 我需要应用的唯一更改是自定义分类声明:

这段代码

         'rewrite' => array(
                'slug' => 'pubs/type',
                'with_front' => false
             ),

对于这个代码

            'rewrite' => true,

就是这样。像魅力一样工作!

【讨论】:

    【解决方案2】:

    注意:

    在我重写之前,我测试了你的代码,也得到了 404。

    1)我重写了您的自定义帖子类型并使用了您的自定义公司类别。

    2) 然后我从默认循环到/%postname%/ 并且它工作正常。

    Functions.php

    这里是自定义帖子类型:

    // Register Custom Post Type
    function register_mypost_type() {
        $labels = array(
            'name'                => _x( 'Companies', 'Post Type General Name' ),
            'singular_name'       => _x( 'Company', 'Post Type Singular Name' ),
            'menu_name'           => __( 'Company' ),
            'parent_item_colon'   => __( 'Parent Company'),
            'all_items'           => __( 'All Companies'),
            'view_item'           => __( 'View Company'),
            'add_new_item'        => __( 'Add New Company'),
            'add_new'             => __( 'New Company'),
            'edit_item'           => __( 'Edit Company'),
            'update_item'         => __( 'Update Company' ),
            'search_items'        => __( 'Search companies' ),
            'not_found'           => __( 'No companies found' ),
            'not_found_in_trash'  => __( 'No companies found in Trash'),
        );
    
        $rewrite = array(
            'slug'                => 'company',
            'with_front'          => true,
            'pages'               => true,
            'feeds'               => true,
        );
    
        $args = array(
            'label'               => __( 'company'),
            'description'         => __( 'Companies Posts' ),
            'labels'              => $labels,
            'supports'            => array( 'title', 'editor', 'excerpt', 'thumbnail', 'revisions', ),
            'taxonomies'          => array( 'companies' ),
            'hierarchical'        => false,
            'public'              => true,
            'show_ui'             => true,
            'show_in_menu'        => true,
            'show_in_nav_menus'   => true,
            'show_in_admin_bar'   => true,
            'menu_position'       => 100,
            'menu_icon'           => '',
            'can_export'          => true,
            'has_archive'         => true,
            'exclude_from_search' => false,
            'publicly_queryable'  => true,
            'query_var'           => 'company',
            'rewrite'             => $rewrite,
            'capability_type'     => 'post',
        );
    
        register_post_type( 'company', $args );
    }
    
    
    add_action( 'init', 'register_mypost_type', 0 );
    

    您的自定义类别

    add_action( 'init', 'build_taxonomies', 0 );
    
    function build_taxonomies() {
        register_taxonomy( 'companies', 'companies', array( 'hierarchical' => true, 'label' => 'Company Categories', 'query_var' => true, 'rewrite' => true ) );
    }
    

    【讨论】:

    • 感谢您的回复。离开了几天。不幸的是,这对我不起作用。您能否确认您将鼠标悬停在某个类别上时看到的 URL?我得到localhost:81/companies/graphic-design
    • 是的,它对我有用,带有 URL 和所有内容,请确保您使用的是上面看到的代码,因为使用您的代码我也得到了 404,还记得循环浏览永久链接和确保 Wordpress 具有对 .htaccess 的写入权限
    • 在“您的自定义类别”代码位中,register_taxonomy 函数的第二个参数应该是在它上面的代码 sn-p 中注册的 CPT 名称“公司”,而不是“公司”,后者不是注册的自定义帖子类型。如果更改将起作用。
    【解决方案3】:

    首先在主题的根目录下创建taxonomy-companies.php 模板。此模板将负责显示您的分类术语帖子。

    然后在该模板上,您需要使用 get_queried_object() 来获取所有分类详细信息。

    例如;

    $queries_obj = get_queried_object();
    echo '<pre>';
    print_r( $queries_obj );
    echo '</pre>';
    

    它会返回

    WP_Term Object
    (
        [term_id] => 10
        [name] => Featured companies
        [slug] => featured-companies
        [term_group] => 0
        [term_taxonomy_id] => 10
        [taxonomy] => companies-category
        [description] => 
        [parent] => 0
        [count] => 2
        [filter] => raw
    )
    

    然后像下面这样查询帖子。

    $q = new WP_Query( array(
        'post_type' =>  'companies', // post type name
        'posts_per_page' =>  get_option( 'posts_per_page' ),
        'tax_query' =>  array(
            array(
                'taxonomy'  => $queries_obj->taxonomy,
                'field' => 'term_id',
                'terms' =>  array( $queries_obj->term_id )
            )
        )
    ) );
    if ( $q->have_posts() ) :
        while ( $q->have_posts() ) :
            $q->the_post();
    
            // loop do stuf
            the_title();
    
        endwhile;
    
        wp_reset_query();
    
    endif;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 2013-01-28
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多