最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

permalinks - Include Taxonomy slug in post url

programmeradmin2浏览0评论

My postname: 127 Hours

My taxonomy name: Actors

I added taxonomy names for post: James Franco

My post link: http:// website/127-hours.html

I would like: http:// website/127-hours-james-franco.html

I would like add custom taxonomy value in to url.

My functions.php code (for Actor taxonomy)

function add_custom_taxonomies()
{
    register_taxonomy('actor', 'post', array(
        'hierarchical' => false,
        'labels' => array(
            'name' => _x('Actor', 'taxonomy general name') ,
            'singular_name' => _x('Actor', 'taxonomy singular name') ,
            'search_items' => __('Actor Search') ,
            'all_items' => __('All Actors') ,
            'edit_item' => __('Edit Actor') ,
            'update_item' => __('Update Actor') ,
            'add_new_item' => __('Add New Actor') ,
            'new_item_name' => __('New Actor Name') ,
            'menu_name' => __('Actors') ,
        ) ,
        'rewrite' => array(
            'slug' => 'actor', // This controls the base slug that will display before each term
            'with_front' => false, // Don't display the category base before "/locations/"
            'hierarchical' => false

        ) ,
    ));
}

add_action('init', 'add_custom_taxonomies', 0);

My postname: 127 Hours

My taxonomy name: Actors

I added taxonomy names for post: James Franco

My post link: http:// website/127-hours.html

I would like: http:// website/127-hours-james-franco.html

I would like add custom taxonomy value in to url.

My functions.php code (for Actor taxonomy)

function add_custom_taxonomies()
{
    register_taxonomy('actor', 'post', array(
        'hierarchical' => false,
        'labels' => array(
            'name' => _x('Actor', 'taxonomy general name') ,
            'singular_name' => _x('Actor', 'taxonomy singular name') ,
            'search_items' => __('Actor Search') ,
            'all_items' => __('All Actors') ,
            'edit_item' => __('Edit Actor') ,
            'update_item' => __('Update Actor') ,
            'add_new_item' => __('Add New Actor') ,
            'new_item_name' => __('New Actor Name') ,
            'menu_name' => __('Actors') ,
        ) ,
        'rewrite' => array(
            'slug' => 'actor', // This controls the base slug that will display before each term
            'with_front' => false, // Don't display the category base before "/locations/"
            'hierarchical' => false

        ) ,
    ));
}

add_action('init', 'add_custom_taxonomies', 0);
Share Improve this question asked Jan 29, 2017 at 11:33 KenanKenan 571 silver badge8 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 3

Add Custom Taxonomy Tags to Your WordPress Permalinks

What you wish to do is have your taxonomy available to use within the Permalink structure e.g. /%actor%/%postname%

First you write your taxonomomy

as you have already done, but you require additional fields:

add_action('init', 'add_actor_taxonomy');
 
function add_actor_taxonomy() {
  if (!is_taxonomy('actor')) {
    register_taxonomy( 'actor', 'post', 
      array(
        'hierarchical' => FALSE,
        'label' => __('actor'),
        'public' => TRUE,
        'show_ui' => TRUE,
        'query_var' => 'actor',
        'rewrite' => true, // this adds the tag %actor% to WordPress
      )
    );
  }
}

Even though the %actor% tag has been added to WordPress it won't work until you tell WordPress how to translate the tag.

// The post_link hook allows us to translate tags for regular post objects
add_filter('post_link', 'actor_permalink', 10, 3);
// The post_type_link hook allows us to translate tags for custom post type objects
add_filter('post_type_link', 'actor_permalink', 10, 3);
 
function actor_permalink($permalink, $post_id, $leavename) {
  // If the permalink does not contain the %actor% tag, then we don’t need to translate anything.
  if (strpos($permalink, '%actor%') === FALSE) return $permalink;
   
    // Get post
    $post = get_post($post_id);
    if (!$post) return $permalink;
 
    // Get the actor terms related to the current post object.
    $terms = wp_get_object_terms($post->ID, 'actor');
    
    // Retrieve the slug value of the first actor custom taxonomy object linked to the current post.
    if ( !is_wp_error($terms) && !empty($terms) && is_object($terms[0]) )
      $taxonomy_slug = $terms[0]->slug;
    // If no actor terms are retrieved, then replace our actor tag with the value "actor"
    else
      $taxonomy_slug = 'actor';
 
  // Replace the %actor% tag with our custom taxonomy slug
  return str_replace('%actor%', $taxonomy_slug, $permalink);
}

With a custom permalink structure like this

/%actor%/%postname%

Your new post link will look like this

http://website/james-franco/127-hours

Reference: http://shibashake/wordpress-theme/add-custom-taxonomy-tags-to-your-wordpress-permalinks

发布评论

评论列表(0)

  1. 暂无评论