获取类别不在URL上工作

时间:2014-08-23 作者:100d

虽然这是我的第一篇帖子,但我一直在这里寻找答案,所以我知道规则,这不是重复,因为我已经尽了全力,但似乎无法让代码正常工作。请注意,我已经找到了许多答案,并尝试了几种方法,但都没有奏效。

问题是,我正在尝试重写permalink结构,我想将类别和父类别都添加到url中,因此它看起来像下面的示例,但不知何故,我的代码似乎不起作用,下面函数的url中缺少类别和父段塞。

功能1-此功能正常,仅供参考

function custom_list_rewrite() {
    global $wp_rewrite;
    $query_arg = \'post_type=custom_list&p=\';
    $wp_rewrite->add_rewrite_tag( \'%post_id%\', \'([^/]+)\', $query_arg );
    $wp_rewrite->add_permastruct( \'custom_list\', \'%post_id%-%category%\', false );
    }
add_action( \'init\', \'custom_list_rewrite\' );
功能2-

function custom_permalink( $post_link, $id = 0, $leavename ) {
    global $wp_rewrite;

    $post = &get_post( $id );
    if ( is_wp_error( $post ) || $post->post_type != \'custom_list\' )
        return $post_link;

    //first thing first, get the category id from post id
        $category_id = get_the_category( $post->ID );   
    //firstly, load data for your child category
        $child = get_category( $category_id );
    //from your child category, grab parent ID
        $parent = $child->parent;
    //load object for parent category
        $parent_name = get_category( $parent );
    //grab a category name
        $parent_name = $parent_name->name;  


    $newlink = $wp_rewrite->get_extra_permastruct( \'custom_list\' );
    $newlink = str_replace( \'%post_id%\', $post->ID, $newlink );
    $newlink = str_replace( \'%category%\', $parent_name.\'-\'.$child->name, $newlink );
    $newlink = home_url( $newlink );
    return $newlink;

    }
add_filter( \'post_type_link\', \'custom_permalink\', 1, 3 );
在完美的世界中,我的链接应该是这样的http://www.mydomain.com/123-honda-civic但本田思域失踪了http://www.mydomain.com/123-

请给我指一下正确的方向。

谢谢

1 个回复
SO网友:100d

我使用wp\\u get\\u object\\u术语解决了这个问题,这可能不是最干净的方法,但它满足了我的需要。

对于那些有同样问题的人,我的最终产品是这样的:

function custom_permalink( $post_link, $id = 0, $leavename ) {
    global $wp_rewrite;

    $post = &get_post( $id );
    if ( is_wp_error( $post ) || $post->post_type != \'custom_list\' )
        return $post_link;

    $term = wp_get_object_terms($post->ID, \'category\'); 
    if(!empty($term)): 
        $parent = $term[0]->parent; 
        $parents[] = $term[0]->term_id;
        while ($parent): 
        $parents[] = $parent; 
        $new_parent = get_term_by( \'id\', $parent, \'category\' ); 
        $parent = $new_parent->parent; 
        endwhile; 
    endif;


    $newlink = $wp_rewrite->get_extra_permastruct( \'custom_list\' );
    $newlink = str_replace( \'%post_id%\', $post->ID, $newlink );
    $newlink = str_replace( \'%category%\', $new_parent->slug.\'-\'.$term[0]->slug, $newlink );
    $newlink = home_url( $newlink );
  return $newlink;

  }
add_filter( \'post_type_link\', \'custom_permalink\', 1, 3 );
希望这有帮助。另外,如果你知道一个更有效的方法来处理我原来的帖子,请让我知道。

结束

相关推荐

Get all media categories

我为medias帖子类型添加了一个新的分类法:function register_taxonomy_for_images() { register_taxonomy_for_object_type(\'category\', \'attachment\'); } add_action(\'init\', \'register_taxonomy_for_images\'); 我还通过wordpress管理员添加了一些类别。如何获取我添加的所有媒体类