Получить категорию не работает на URL

Хотя это мой первый пост, но я пришел сюда для ответов, поэтому я знаю правило, и это не дубликат, потому что я пробовал все, что мог, но не мог заставить мои коды работать. Обратите внимание, что я прошел множество ответов и опробовал несколько способов, но никто не работал.

Вот проблема, я пытаюсь переписать структуру permalink, я хотел добавить категорию и родительскую категорию к URL-адресу, чтобы он выглядел как пример ниже, но каким-то образом мой код не работает, категория и родительский slug отсутствуют на 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, но honda-civic отсутствует, поэтому он показывает http://www.mydomain.com/123-

Пожалуйста, направьте меня в правильном направлении.

Благодарю.

Я решил эту проблему, используя wp_get_object_terms, возможно, не самый чистый способ, но он делает то, что я хотел.

Для тех из вас, у кого такая же проблема, так выглядит мой конечный продукт:

 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 ); 

Надеюсь это поможет. Кроме того, если вы знаете более эффективный способ справиться с моим оригинальным сообщением, пожалуйста, дайте мне знать.