règles de réécriture pour plusieurs taxonomies (plus de 2)

4

J'utilise woocommerce et j'ai quelques "attributs de produit" qui ne sont que des taxonomies.

J'ai les taxonomies suivantes:

  • pa_color
  • pa_material
  • style de pa

le pa_ représente l’attribut du produit et il est intégré à WooCommerce qui gère ces taxonomies. Je ne peux donc rien y changer.

WooCommerce est également livré avec des catégories de produits (product_cat) et des taxonomies de balises produit (product_tag).

la requête suivante me permet d'obtenir tous les produits rouge et vinyle de la catégorie de produits Tissus

  

? product_cat = tissus & pa_material = vinyle & amp_pa_color = rouge

Je voudrais transformer cela en un joli lien permanent, quelque chose comme:

  

catégorie de produit / tissu / matériau / vinyle / couleur / rouge

Cette réponse me rapproche de ce que j'essaie de réaliser:

Règles de réécriture d'URL pour plusieurs requêtes de taxonomie

en ce que je peux obtenir mon URL pour gérer 2 taxonomies (taxonomie de product_cat + 1 attribut), mais je ne sais pas comment obtenir 3 paramètres (ou plus).

Je peux donc obtenir:

  

/ catégorie de produits / tissus / couleur / rouge

ou

  

/ catégorie de produit / tissus / matériau / vinyle

mais pas tous les 3 ensemble

  

/ catégorie de produit / tissu / matériau / vinyle / couleur / rouge

éditer / bien que je pense que ce serait l'idéal d'avoir l'URL soit

/ tissus / vinyle / rouge

Je ne suis pas sûr que ce soit possible?

fin de modifier /

WooCommerce a également quelques paramètres pour modifier les permaliens (comme ajouter l'URL avec 'shop' ou changer le slug de catégorie de produit). Je devrai donc en rendre compte éventuellement, mais pour le moment, je dois obtenir cette première étape. vers le bas.

par souci de simplicité, il s’agit d’une version allégée de mon code. Les taxonomies que je tire des fonctions woocommerce intégrées, mais la question ne se limite pas au woocommerce ... s’agissant de tout site comportant de nombreuses taxonomies.

add_action( 'init', 'wpa_init' );
function wpa_init() {

$taxonomies = array ('pa_color'=>'Color','pa_material'=>'Material','pa_style'=>'Style');
$base = 'product-category';

        foreach ($taxonomies as $taxonomy=>$mask):      
            $attribute = strtolower(sanitize_title($mask));
            add_rewrite_rule( $base.'/(.+?)/'.$attribute.'/([^/]+)(/page/(\d+))?/?$', 'index.php?product_cat=$matches[1]&'.$taxonomy.'=$matches[2]&paged=$matches[4]', 'top' );         
        endforeach;     
}

c’était la meilleure ressource que j’ai trouvée sur les permaliens de requête de taxonomie: enlace

mais cela aussi semble bloqué à 2 taxonomies.

    
posée helgatheviking 06.03.2012 - 22:22

2 réponses

3

Vous pouvez essayer quelque chose comme ceci:

function custom_rewrite( $wp_rewrite ) {

    $feed_rules = array(
        'product-category/(.+)/material/(.+)/color/(.+)'    =>  'index.php?product_cat='. $wp_rewrite->preg_index(1).'&pa_material='. $wp_rewrite->preg_index(2).'&pa_color='. $wp_rewrite->preg_index(3)
        'product-category/(.+)/color/(.+)'    =>  'index.php?product_cat='. $wp_rewrite->preg_index(1).'&pa_color='. $wp_rewrite->preg_index(2)
        'product-category/(.+)/material/(.+)'    =>  'index.php?product_cat='. $wp_rewrite->preg_index(1).'&pa_material='. $wp_rewrite->preg_index(2)
    );

    $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
// refresh/flush permalinks in the dashboard if this is changed in any way
add_filter( 'generate_rewrite_rules', 'custom_rewrite' );

Cela peut ne pas fonctionner exactement comme annoncé, et vous devrez peut-être apporter des modifications aux expressions rationnelles, mais c'est l'essentiel de ce qu'il faut faire (90% du travail).

Vous devrez vider les liens permanents si vous ajoutez / modifiez / supprimez ce code, placez-le dans functions.php ou dans un plugin personnalisé. Vous pouvez vider les liens permanents en accédant simplement à la zone d'administration et en réenregistrant les liens permanents

.

En tant que note de bas de page, vous pouvez vous heurter à des problèmes conflictuels si vous commencez à utiliser les hiérarchies,

par exemple. Si vous avez un t-shirt / petit et une robe / petite catégorie et que vous utilisez une URL telle que / produits-catégorie / petit / couleur / rouge, vous n'obtiendrez peut-être pas les résultats escomptés, par exemple. petits t-shirts? ou vouliez-vous dire petites robes?

Alors méfiez-vous de l'ambiguïté

    
réponse donnée Tom J Nowell 07.03.2012 - 00:38
2

Pour référence future (comme l'année prochaine, lorsque je recherche et trouve ma propre question), vous pouvez convertir cette syntaxe en syntaxe add_rewrite_rule() en convertissant les clés du tableau $new_rules en paramètre $ regex de add_rewrite_rule() avec le paramètre valeur en tant que $ rewrite et 'top' en tant que $ position.

add_rewrite_rule($regex,$rewrite, $position);

Ou à titre d'exemple d'une de mes demandes d'en haut:

function custom_rewrite() {

   add_rewrite_rule(
    'product-category/(.+?)/material/(.+?)/?$',
    'index.php?product_cat=matches[1]&pa_material=$matches[2]',
    'top'
    );

}
// refresh/flush permalinks in the dashboard if this is changed in any way
add_action( 'init', 'custom_rewrite' );

Pour une raison quelconque, je n'ai pas réussi à utiliser regenerate_rewrite_rules en tant que hook / filtre, donc basculé sur init.

    
réponse donnée helgatheviking 06.03.2013 - 04:19

Lire d'autres questions sur les étiquettes