Wordpress:自定义分类法在URL中不一致

时间:2015-01-20 14:54:36

标签: php wordpress url-rewriting custom-taxonomy

我使用functions.php中的代码设置了自定义帖子类型和自定义分类。

点击前端的存档页面并点击" View Post"在管理编辑屏幕中。但是,当在站点搜索结果中返回帖子时,自定义分类法确实缺失。搜索结果中的网址为http://www.example.com/foo//postname

知道为什么URL中的自定义分类法在某些情况下会起作用而在其他情况下却不起作用吗?     add_action(' init',' create_foo_posttype');     function create_foo_posttype(){

    $tax_labels = array(
      'name' => _x( 'Foo Categories', 'taxonomy general name' ),
      'singular_name' => _x( 'Foo Category', 'taxonomy singular name' ),
      'all_items' => __( 'All Foo Categories' ),
      'parent_item' => null,
      'parent_item_colon' => null,
      'edit_item' => __( 'Edit Foo Category' ), 
      'update_item' => __( 'Update Foo Category' ),
      'add_new_item' => __( 'Add New Foo Category' ),
      'new_item_name' => __( 'New Foo Category Name' ),
    ); 


    register_taxonomy('foo_categories','foo',array(
      'labels' => $tax_labels,
      'hierarchical' => true,
      'has_archive' => true,
      'show_admin_column' => true,
      'query_var' => true,
      'rewrite' => array( 'slug' => 'foo' )   
    ));


    register_post_type( 'foo',
        array(
            'labels' => array(
                'name' => __( 'Foo' ),
                'singular_name' => __( 'Foo' )
            ),
            'public' => true,
            'exclude_from_search' => false,
            'show_ui' => true,
            'show_in_menu' => true,
            'menu_position' => 100,
            'capability_type' => 'post',
            'supports' => array( 'title', 'author', 'thumbnail', 'trackbacks', 'revisions' ),
            'taxonomies' => array( 'foo_categories' ),
            'has_archive' => true,
            'rewrite' => array( 'slug' => 'foo/%foo_categories%')     
        )
    );
  flush_rewrite_rules();
}


add_action( 'init', 'cust_rewrite_init' );
function cust_rewrite_init() {
    $GLOBALS['wp_rewrite']->use_verbose_page_rules = true;
}

add_filter( 'page_rewrite_rules', 'cust_rewrite_collect_page_rewrite_rules' );
function cust_rewrite_collect_page_rewrite_rules( $page_rewrite_rules )
{
    $GLOBALS['cust_rewrite_page_rewrite_rules'] = $page_rewrite_rules;
    return array();
}

add_filter( 'rewrite_rules_array', 'cust_rewrite_prepend_page_rewrite_rules' );
function cust_rewrite_prepend_page_rewrite_rules( $rewrite_rules )
{
    return $GLOBALS['cust_rewrite_page_rewrite_rules'] + $rewrite_rules;
}

1 个答案:

答案 0 :(得分:0)

我发现了问题。它不是我最初发布的代码。它在这里:

        add_filter('post_type_link', 'cust_permalink_structure', 1, 4);
    function cust_permalink_structure($post_link, $post, $leavename, $sample)
    {
        if ( false !== strpos( $post_link, '%foo_categories%' ) ) {
            $post_type_term = get_the_terms( $post->ID, 'foo_categories' );
            $post_link = str_replace( '%foo_categories%', $post_type_term[0]->slug, $post_link ); 
        }
        return $post_link;
    }

如果帖子有多个税值,则使用$post_type_term[0]->slug;,但当帖子只有一个(我的所有帖子都这样做)时失败。要修复它,我使用array_pop而不是其他数组调用,它工作正常。已解决的代码:

        add_filter('post_type_link', 'cust_permalink_structure', 1, 4);
    function cust_permalink_structure($post_link, $post, $leavename, $sample)
    {
        if ( false !== strpos( $post_link, '%foo_categories%' ) ) {
            $post_type_term = get_the_terms( $post->ID, 'foo_categories' );
            $one_term = array_pop($post_type_term);
            $post_link = str_replace( '%foo_categories%', $one_term->slug, $post_link ); 
        }
        return $post_link;
    }