虽然这是我的第一篇帖子,但我一直在这里寻找答案,所以我知道规则,这不是重复,因为我已经尽了全力,但似乎无法让代码正常工作。请注意,我已经找到了许多答案,并尝试了几种方法,但都没有奏效。
问题是,我正在尝试重写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-请给我指一下正确的方向。
谢谢
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 );
希望这有帮助。另外,如果你知道一个更有效的方法来处理我原来的帖子,请让我知道。