Frapper un mur de briques avec ce qui suit:
J'ai:
- 1 type de message personnalisé appelé
cpt_community
- 1 taxonomie personnalisée appelée
tax_community
Si j'ai défini 'rewrite' => true
mon enregistrement CPT, les liens permanents vers une entrée pour ce CPT sont de la forme de http://<domain>/cpt_community/test_item/
, et j'obtiens un 404 lorsque j'y navigue.
Si je définis 'rewrite' => false
, alors les permaliens le sont http://<domain>/?cpt_community=test_item/
, et cela fonctionne très bien.
Donc, je fais évidemment quelque chose de mal / stupide - la question est, quoi?
[Mise à jour]
- Après chaque modification, je vide les règles en allant dans Paramètres> Permaliens (et en enregistrant)
- Après avoir tout laissé seul pendant une heure, les choses ont commencé à fonctionner correctement - alors pourquoi le retard?
Code
Inscription CPT
function community_post_type() {
$labels = array('name' => 'Community');
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => false,
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'has_archive' => true,
'supports' => array('title','editor','excerpt','custom-fields','comments','revisions','thumbnail','author','page-attributes')
);
register_post_type('cpt_community', $args);
}
add_action( 'init', 'community_post_type' );
Enregistrement de taxonomie personnalisée
function community_tax_type() {
register_taxonomy(
'tax_community',
'cpt_community',
array( 'hierarchical' => false,
'label' => 'Community Content Type',
'show_ui' => true,'query_var' => true,
'rewrite' => true,
'singular_label' => 'Community Content Type',
'capabilities' => array('assign_terms' => 'edit_community_tags')
)
);
# allow roles to add community taxonomy tags to a community CPT
$roles = array("subscriber","contributor","author","editor","administrator");
foreach ($roles as $role_name) {
$role = get_role($role_name);
$role->add_cap("edit_community_tags");
}
}
add_action( 'init', 'community_tax_type' );
Réponses:
Utilisez la fonction flush_rewrite_rules () pour définir de nouvelles règles de réécriture, mais pas avec votre code sur init-hook, uniquement sur le plugin d'activation ou le thème! Voir plus dans mon article: http://wpengineer.com/2044/custom-post-type-and-permalink/
Vider les règles uniquement sur l'activation (et la désactivation). Ne le faites pas sur un autre crochet.
la source
Allez simplement dans Paramètres> Permaliens pour flasher les règles. Aucun code n'est nécessaire. Vous n'avez pas besoin de mettre à jour la structure, il suffit d'ouvrir cette page d'administration pour faire le travail
la source