2014-01-22 3 views
1

Я ищу несколько дней для ответа, как добавить таксономию в мой постоянный пост. Я нашел эту статью, которая почти точно дает ответ, но она не работает для моего настраиваемого типа сообщений. http://shibashake.com/wordpress-theme/add-custom-taxonomy-tags-to-your-wordpress-permalinksWordpress Добавить тег таксономии в permalink пользовательский тип сообщения

В статье описывается, что сначала сделать простой Таксономия:

add_action('init', 'my_rating_init'); 


    function my_rating_init() { 
     if (!is_taxonomy('rating')) { 
      register_taxonomy('rating', 'post', 
         array( 'hierarchical' => FALSE, 'label' => __('Rating'), 
          'public' => TRUE, 'show_ui' => TRUE, 
          'query_var' => 'rating', 
          'rewrite' => true)); 
     } 
    } 

И тогда вы можете переписать URL в вашей системе Wordpress, как:% рейтинг /% /% postname%

И то вам нужно перевести% рейтинг% до тегов таксономии, выполнив:

add_filter('post_link', 'rating_permalink', 10, 3); 
add_filter('post_type_link', 'rating_permalink', 10, 3); 

function rating_permalink($permalink, $post_id, $leavename) { 
    if (strpos($permalink, '%rating%') === FALSE) return $permalink; 

     // Get post 
     $post = get_post($post_id); 
     if (!$post) return $permalink; 

     // Get taxonomy terms 
     $terms = wp_get_object_terms($post->ID, 'rating'); 
     if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug; 
     else $taxonomy_slug = 'not-rated'; 

    return str_replace('%rating%', $taxonomy_slug, $permalink); 
} 

Это прекрасно работает «пост», но когда я изменяю:

register_taxonomy('rating', 'post', 

к:

register_taxonomy('rating', 'mycustomposttype', 

переписывания URL больше не работает. И только дает следующий URL:

http://www.website.com/custom-post-type/post

Где я хочу это:

http://www.website.com/custom-post-type/taxonomy-tag/post

Так мои 2 вопроса:

  1. Как я могу сделать эту работу для моего пользовательский тип сообщения?
  2. Как я могу сделать эту работу только для моего настраиваемого типа сообщений? Потому что мне нужно добавить% rating% к моей системе wordpress (настройки -> permalinks), чтобы она меняла все мои URL.

ответ

1

Попробуйте как этот

add_filter('post_link', 'modify_permalink', 10, 2); 
add_filter('post_type_link', 'modify_permalink', 10, 2); 
function modify_permalink($url, $post) { 
    // limit to certain post type. remove if not needed 
    if ($post->post_type != 'article') { 
     return $url; 
    } 
    // fetches post type to get slug for post type 
    $type = get_post_type_object($post->post_type); 
    // fetches term 
    $term = get_the_terms($post->ID, 'rating'); 
    if ($term && count($term)) { 
     // takes only 1st one 
     $term = array_pop($term); 
     // creates the url prepending post type slug and term slug to post name 
     $url = site_url('/').($type->rewrite ? $type->rewrite['slug'].'/' : '').$term->slug.'/'.$post->post_name; 
    } 
    return $url; 
} 

И тогда вы должны добавить собственный URL переписывания. Как пояснено here on wordpress site

Смежные вопросы