2017-01-05 5 views
7

Ich habe versucht, diese Frage im Wordpress Devlopment-Netzwerk ohne Erfolg, versuche ich nur 3 spezifische Kategorien in Permalinks für benutzerdefinierte Post-Typ Kategorien anzuzeigen.Zeige nur bestimmte Kategorien in Permalinks für benutzerdefinierte Beitragstyp in WordPress

Im Augenblick ist die Permalinks Struktur (dh die Struktur durch the theme i'm using gegeben ist und dass ich durch ein Kind Thema bin zu ändern) ist wie folgt:

www.myfoodblog.com/recipes/the-post-title/ 
     ^  ^  ^ 
     root custom-post-type title 

einige Posten sind unter 3 Kategorien, die Ich mag würde zu Anzeige in Permalinks die restaurant, users und admin bekommt so etwas wie diese

www.myfoodblog.com/recipes/restaurant/the-post-title/ 

www.myfoodblog.com/recipes/users/the-post-title/ 

www.myfoodblog.com/recipes/admin/the-post-title/ 

verließ die ursprüngliche Struktur für Beiträge, die nicht in diesen Kategorien.

Ich versuchte mit this plugin, aber es wird die benutzerdefinierte Beitragstyp Kategorie für alle Beiträge angezeigt.

Ich habe auch versucht, den Anweisungen in this question zu folgen, aber es funktioniert nicht, keine Änderungen werden in der Permalinks-Struktur vorgenommen.

Jeder Rat wird sehr geschätzt.

+0

Sie ein Plugin für die benutzerdefinierte post-Typen nutzen oder haben Sie definieren die benutzerdefinierte selbst post-Typ? Ich habe dies auf einer Website erreicht, an der ich gerade arbeite, aber es ist alles benutzerdefinierte Code – Daniel

+0

@Daniel Ich verwende momentan kein Plugin und der CPT wird durch das Thema definiert, das ich verwende. – Yenn

+0

Okay, wie ist deine Permalink-Struktur? Ich würde vorschlagen '/% category% /% postname% /' Wordpress sollte die URL wie folgt liefern: domain/CPT/category/postname – Daniel

Antwort

2

Sie haben mit beiden post_type_link zu arbeiten, und fügen Sie ein rewrite rule

function recipes_post_link($post_link, $id = 0){ 
    $post = get_post($id); 
    if (is_object($post)){ 
     $terms = get_the_terms($post->ID, 'recipe-category'); 
     foreach($terms as $term) { 
      if($term->slug == 'restaurants' || $term->slug == 'users'){ 
       return str_replace(site_url()."/recipes" , site_url()."/recipes/".$term->slug , $post_link); 
      } 
     } 
    } 
    return $post_link; 
} 
add_filter('post_type_link', 'recipes_post_link', 1, 3); 

function custom_rewrite_basic() { 
    add_rewrite_rule('^recipes/(.+)/(.+)', 'index.php?recipe=$matches[2]', 'top'); 
} 
add_action('init', 'custom_rewrite_basic'); 
+0

das ist, was ich suchte! Es funktioniert perfekt! Ich wusste nichts über die 'add_rewrite_rule' Funktion und es scheint notwendig zu sein – Yenn

2

Create Post Type

add_action('init', 'codex_recipes_init'); 
/** 
* Register a recipes post type. 
* 
* @link http://codex.wordpress.org/Function_Reference/register_post_type 
*/ 
function codex_recipes_init() { 
    $labels = array(
     'name'    => _x('Recipes', 'post type general name', 'your-plugin-textdomain'), 
     'singular_name'  => _x('Recipe', 'post type singular name', 'your-plugin-textdomain'), 
     'menu_name'   => _x('Recipes', 'admin menu', 'your-plugin-textdomain'), 
     'name_admin_bar'  => _x('Recipe', 'add new on admin bar', 'your-plugin-textdomain'), 
     'add_new'   => _x('Add New', 'recipe', 'your-plugin-textdomain'), 
     'add_new_item'  => __('Add New Recipe', 'your-plugin-textdomain'), 
     'new_item'   => __('New Recipe', 'your-plugin-textdomain'), 
     'edit_item'   => __('Edit Recipe', 'your-plugin-textdomain'), 
     'view_item'   => __('View Recipe', 'your-plugin-textdomain'), 
     'all_items'   => __('All Recipes', 'your-plugin-textdomain'), 
     'search_items'  => __('Search Recipes', 'your-plugin-textdomain'), 
     'parent_item_colon' => __('Parent Recipes:', 'your-plugin-textdomain'), 
     'not_found'   => __('No recipes found.', 'your-plugin-textdomain'), 
     'not_found_in_trash' => __('No recipes found in Trash.', 'your-plugin-textdomain') 
    ); 

    $args = array(
     'labels'    => $labels, 
     'description'  => __('Description.', 'your-plugin-textdomain'), 
     'public'    => true, 
     'publicly_queryable' => true, 
     'show_ui'   => true, 
     'show_in_menu'  => true, 
     'query_var'   => true, 
     'rewrite'   => array('slug' => 'recipes/%type%'), 
     'capability_type' => 'post', 
     'has_archive'  => 'recipes', 
     'hierarchical'  => false, 
     'menu_position'  => null, 
     'supports'   => array('title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments') 
    ); 

    register_post_type('recipes', $args); 
} 

Wichtig: Blick auf Rewrite-Regel: 'rewrite'=> array('slug' => 'recipes/%type%'),

Create Custom Taxonomy

// hook into the init action and call create_recipes_taxonomies when it fires 
add_action('init', 'create_recipes_taxonomies', 0); 

function create_recipes_taxonomies() { 

    // Add new taxonomy, NOT hierarchical (like tags) 
    $labels = array(
     'name'      => _x('Type', 'taxonomy general name', 'textdomain'), 
     'singular_name'    => _x('Type', 'taxonomy singular name', 'textdomain'), 
     'search_items'    => __('Search Types', 'textdomain'), 
     'popular_items'    => __('Popular Types', 'textdomain'), 
     'all_items'     => __('All Types', 'textdomain'), 
     'parent_item'    => null, 
     'parent_item_colon'   => null, 
     'edit_item'     => __('Edit Type', 'textdomain'), 
     'update_item'    => __('Update Type', 'textdomain'), 
     'add_new_item'    => __('Add New Type', 'textdomain'), 
     'new_item_name'    => __('New Type Name', 'textdomain'), 
     'separate_items_with_commas' => __('Separate types with commas', 'textdomain'), 
     'add_or_remove_items'  => __('Add or remove types', 'textdomain'), 
     'choose_from_most_used'  => __('Choose from the most used types', 'textdomain'), 
     'not_found'     => __('No types found.', 'textdomain'), 
     'menu_name'     => __('Types', 'textdomain'), 
    ); 

    $args = array(
     'hierarchical'   => true, 
     'labels'    => $labels, 
     'show_ui'    => true, 
     'show_admin_column'  => true, 
     'update_count_callback' => '_update_post_term_count', 
     'query_var'    => true, 
     'rewrite'    => array('slug' => 'type'), 
    ); 

    register_taxonomy('type', 'recipes', $args); 
} 

Add Filter Post Type Link

function recipes_post_link($post_link, $id = 0){ 
    $post = get_post($id); 
    if (is_object($post)){ 
     $terms = wp_get_object_terms($post->ID, 'type'); 
     if($terms){ 
      return str_replace('%type%' , $terms[0]->slug , $post_link); 
     } 
    } 
    return $post_link; 
} 
add_filter('post_type_link', 'recipes_post_link', 1, 3); 

Wichtig: Schließlich gehen Sie zu Permalink Optionen und setzen Sie es zurück.

enter image description here

+0

Danke für den Blick darauf. Die Post-Typ und die benutzerdefinierte Taxonomie sind bereits durch das Thema definiert und jeweils namens 'recipes' und' Rezept-Category' So sieht aus wie ich Ihre 'recipes_post_link' Funktion nur verwenden müssen, würde aber es funktioniert nicht. Auch sieht es aus wie es für jede Kategorie funktionieren würde, während ich gefragt nur mit einiger Kategorie, so etwas wie 'if ($ Bedingungen zu arbeiten ==‚Restaurant‘|| Begriffe $ ==‚users‘|| $ terms ==‚admin‘) {tun Sachen} ' – Yenn

Verwandte Themen