Définir les permaliens pour les custom post type de taxonomie
Je veux créer canonique permaliens pour les produits et les types de produits. J'ai les types de poste personnalisés et personnalisé taxonomie compris, mais je ne sais pas si ses possible de définir des liens permanents avec les taxonomies. Donc, mon flux de travail, par exemple, ne serait-ce...
- - Je créer un custom post type appelé produits.
- Puis-je créer une taxonomie personnalisée pour types de produits.
- Puis-je ajouter un type de produit appelé 'Chaises' et ajouter un produit appelé
'Chaise rouge' à cette catégorie.
Une fois que j'ai créer ce produit, le souhaité la structure des permaliens pour consulter ce produit
formaté comme soi ->
http://shop.com/products/chairs/red-chair
Est-ce possible dans wordpress 3.4? La meta boîtes dans mon custom post type permet de sélectionner les types de produits définis pour mon custom taxonomy, et il n'y aura qu'un type de produit.
Si possible, j'aimerais aussi inclure les parents de la sélection de la catégorie de produit, si possible (Par exemple, si le 'chaises' catégorie était un enfant de la 'lounge' catégorie, la structure des permaliens serait comme suit ->
http://shop.com/products/lounge/chairs/red-chair
Voici comment j'ai créer le custom post type et la coutume de la taxonomie, j'ai juste besoin d'aide pour la définition de réécriture /slug règles pour y inclure le type de produit en ce permalien.
/* Custom Post Type - Products ------- */
function products_init() {
$args = array(
'public' => true,
'label' => 'Products'
);
register_post_type( 'products', $args );
}
add_action( 'init', 'products_init' );
/* Custom Taxonomy - Product Type ------- */
add_action( 'init', 'create_prodtype' );
function create_prodtype() {
$labels = array(
'name' => _x( 'Product Type', 'products' ),
'singular_name' => _x( 'Product Category', 'product' ),
'search_items' => __( 'Search Product Types' ),
'all_items' => __( 'All Product Types' ),
'parent_item' => __( 'Products' ),
'parent_item_colon' => __( 'Products:' ),
'edit_item' => __( 'Edit Product Type' ),
'update_item' => __( 'Update Product Type' ),
'add_new_item' => __( 'Add New Product Type' ),
'new_item_name' => __( 'New Product Type' ),
);
register_taxonomy(
'products',
array('products'),
array(
'rewrite' => array(
'slug' => 'products',
'hierarchical' => true
),
'with_front' => false,
'labels' => $labels
));
}
http://shop.com/products/lounge/chairs/red/fancy-chair
seront plus susceptibles de ne pas fonctionner.Hmm, essayé de l'intégrer à mon code et aussi sur son propre. Ce n'est pas de ramasser la " FAQ " préfixe d'URL à tous les...
OriginalL'auteur reekogi | 2012-11-25
Vous devez vous connecter pour publier un commentaire.
Solution
Je l'ai compris avec l'aide de ces postes par Jan de Fabry ->
J'ai mis en place le custom post type comme suit ->
Back-end function
Je réécriture de la structure des permaliens qui est enregistré dans le back-end, de sorte que le permalien est enregistré pour inclure la coutume de la taxonomie de type "type de produit"
Définir la permalien réglage à "nom du Poste" et enregistrez. Si vous ajoutez un produit à une catégorie et de les enregistrer, il doit ré-écrire le permalien pour inclure le customy taxonomie définition, dans ce cas - "type de produit". Donc, si vous ajoutez "Chaise Rouge" à la "Chaises" catégorie, l'URL sera formaté comme suit ->
Mais si vous essayez d'aller sur cette page, vous obtiendrez un message d'erreur 404. C'est parce que wordpress ne savons pas encore comment interroger la base de données avec cette URL, de sorte que vous avez à écrire.
Avant la fin de la fonction
Nous avons besoin d'ajouter des règles de réécriture, de sorte que wordpress peut prendre notre url de requête et de la base de données. Nous utilisons wordpress fonction
add_rewrite_rule
de traduire le permalien de la donnée dans une chaîne de requête.Dans cette fonction, le tableau de concordance est défini par WordPress explosion de la chaîne à chaque barre oblique. Donc, dans cet exemple, l'expression régulière
([^/]+)
est utilisé pour correspondre à quoi que ce soit dans entre chaque barre oblique. Dans cet exemple, il y a 2 niveaux, de sorte qu'il corresponde au type de produit, alors que le produit, et les ajoute au tableau de concordance, où de type de produit = $matchesUn, et produit = $matches[2].Cette règle de réécriture traduit this ->
Dans this ->
Qui notre base de données peuvent utiliser pour interroger la base de données et renvoyer la bonne page du produit avec la mise en forme permalien.
Cela déclenche le type de produit que des pages comme il n'y aura qu'un seul niveau dans l'url, le type de produits. Cela signifie que la règle de réécriture va toujours essayer d'identifier le nom du produit tel que défini dans la chaîne de requête. Donc, pour cela, nous avons également écrire un seul niveau de la règle de réécriture:
Ce sera désormais également de la requête pour le type de produit pages, donc il nous suffit de faire une boucle par la taxonomie est normale si nous voulons afficher les différents types de produits, sans jeter les erreurs 404 lorsque nous essayons de lier à eux.
Inconvénient
Ce moment seulement prendre un seul niveau de taxonomie, de sorte que la coutume de la taxonomie de la structure ne peut pas être hiérarchique. Si vous spécifiez plus d'une taxonomie, il utilise le plus l'un avec l'ID du premier à définir le permalien. Un potentiel de solution de contournement pour ce qui est de cacher le custom taxonomy menu qui s'affiche dans la barre latérale de types de poste personnalisés, et d'ajouter une meta box pour la taxonomie, où seule une boîte de sélection peut être utilisé. J'utilise le Meta Box plugin pour cela. (nb, ce plugin n'a pas tout admin menus, il vous permet d'écrire des méta boîtes pour les types de poste personnalisés dans votre functions.php seulement par la création de tableaux - hautement recommandé!)
Merci pour la solution! Dû changer
$term = $terms[0]->slug;
à$first_key = reset($terms); $term = $first_key->slug;
afin d'obtenir l'ancre sur la page de présentation de travailler!cela fonctionne pour le cpt vous l'appliquez sur, mais la redirection de la règle réécrit tous les permaliens indiqué dans la page, même par d'autres cpt. Ai-je raté quelque chose?
OriginalL'auteur reekogi
@reekogi Cela fonctionne correctement pour le produit custom post type, mais des pauses tous les autres type de poste.
Une solution serait de changer de vars $post_link et $permalien $url
OriginalL'auteur Ednilson Maia