web-dev-qa-db-fra.com

Inclure la taxonomie dans le post-URL

Mon nom de post: 127 heures

Mon nom de taxonomie: Acteurs

J'ai ajouté des noms de taxonomie pour le post: James Franco

Mon lien de publication: http: // website.com/ 127-hours.html

Je voudrais: http: // website.com/ 127-hours-james-franco.html

Je voudrais ajouter une valeur de taxonomie personnalisée dans l'URL.

Mon functions.php code (pour la taxonomie des acteurs)

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

Ajouter des balises de taxonomie personnalisées à votre site WordPress

Ce que vous souhaitez faire est de disposer de votre taxonomie à utiliser dans la structure de liens permanents, par exemple. /%actor%/%postname%

D'abord, vous écrivez votre taxonomomie

comme vous l'avez déjà fait, mais vous avez besoin de champs supplémentaires:

add_action('init', 'add_actor_taxonomy');

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

Même si la balise% actor% a été ajoutée à WordPress, cela ne fonctionnera que si vous indiquez à WordPress comment traduire la balise.

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

Avec une structure permalien personnalisée comme celle-ci

/%actor%/%postname%

Votre nouveau lien de publication ressemblera à ceci

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

Référence: http://shibashake.com/wordpress-theme/add-custom-taxonomy-tags-to-your-wordpress-permalinks

3
Phaze Phusion