Comment changer la structure du permalien pour le type de message personnalisé et ses taxonomies?

10

Il s'agit d'une nouvelle publication d'une question précédente, mais j'aime entrer dans plus de détails maintenant pour pouvoir résoudre complètement ce problème.

Encore une fois, avec des publications (normales), changer le permalien est aussi simple que d'aller dans Paramètres> Permalien et en le changeant en tout ce que vous aimez, comme le plus utilisé %category%/%postname%.html. Tout cela fonctionne. Si seulement c'était aussi simple pour le type de message personnalisé et ses taxonomies également.

Voilà donc ce que j'aime accomplir.

  1. http://mywordpress.com/portfolio.html - Affichez tous les articles dans toutes les catégories.
  2. http://mywordpress.com/portfolio/music/ - Affichez tous les articles de cette catégorie.
  3. http://mywordpress.com/portfolio/music/trance/ - Affichez tous les articles de cette catégorie (enfant).
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - Affichez la publication.

Ce que j'ai obtenu jusqu'à présent est le suivant:

  1. D' abord , je créé un custom_post_typenom projet et un taxonomy project_category .
  2. J'ai créé un portfolio de pages et je lui ai donné un modèle de page qui répertoriera tous les post_type = projectmessages. Comment puis-je ajouter .html au permalien des pages? Il est maintenant lié à http://mywordpress.com/portfolio alors que je veux http://mywordpress.com/portfolio.html . Cela devrait résoudre le premier problème.
  3. Ensuite, les choses deviendront difficiles, car nous ne savons pas par avance combien de sous-catégories y sont, peut-être qu'il n'y en a même pas. Donc, la structure que nous recherchons est portfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.html. Je suis toujours bloqué à ce stade. Je pense que je devrais en quelque sorte obtenir la dernière catégorie ajoutée au chemin et la transmettre le long de project_category , ce qui devrait conduire à un fichier taxonomy.php où je pourrai le traiter correctement.
  4. Je ne l'ai pas abordé non plus, mais cela devrait avoir quelque chose à voir avec %postname%.htmlla fin de quelque chose.

J'espère que mon problème est clair et qu'il y a des développeurs courageux qui m'aideront à résoudre ce problème qui m'a déjà occupé pendant quatre jours entiers!

marque
la source
1
La solution que j'ai donnée dans la dernière question aurait dû fonctionner de cette façon, si vous l'aviez mise en œuvre correctement. La seule chose est que vous ne pouvez pas obtenir la partie html
Manny Fleurmond
Oui, mais il était verrouillé sur un chemin spécifique, donc uniquement catégorie / sous-catégorie / page alors qu'il pourrait ne pas y avoir de sous-catégories ou même plus. C'est plus dynamique.
Mark
Ou je ne l'ai pas implémenté correctement;)
Mark

Réponses:

4

Ok je pense que je pourrais avoir une solution. Je ne sais pas si c'est la bonne façon d'y parvenir, mais pour l'instant c'est la seule chose qui semble fonctionner.

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');

function mmp_rewrite_rules($rules) {
    $newRules                               = array();
    $newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
    $newRules['portfolio/(.+)/?$']          = 'index.php?project_category=$matches[1]'; 

    return array_merge($newRules, $rules);
}


add_filter('request', 'mmp_rewrite_request');

function mmp_rewrite_request($vars) {
    if (isset($vars['project_category'])) {
        if (strpos($vars['project_category'], '/') !== false) {
            $categories = explode('/', $vars['project_category']);
            $vars['project_category'] = $categories[count($categories) - 1];
        }
    }

    return $vars;
}
marque
la source
Le filtre de demande est un bon moyen de filtrer si nous demandons une catégorie (terme en fait) et une publication. Il permet d'ajouter une seule règle de réécriture et d'obtenir la page de publication, que la publication soit dans une catégorie, une sous-catégorie ou pas du tout.
ZalemCitizen
1

2 méthodes différentes:

* Voir les notes au bas de cet article.


par exemple, vous voulez avoir une telle structure de permalien:
/ MAIN_CATEGORY / SUB_CAT_2 / Another_SUBCAT / my-post

Au début , vous devrez peut-être définir des permaliens sur /% category% /% postname% . Alors...




MÉTHODE 1:

créer des catégories STANDARD ( MAIN_CATEGORY, SUB_CAT_1, and etc..) et enregistrer le CUSTOM POST, y compris ce paramètre:

'taxonomies'    => array('category'..)

et utilisez ces codes pour modifier les permaliens: https://wordpress.stackexchange.com/a/195643/33667
Ensuite, après avoir publié un POST PERSONNALISÉ (s'il est joint sous une catégorie), l'URL sera:
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post



MÉTHODE 2:

(ps cette méthode n'est pas conseillée si vous prévoyez de publier des centaines ou des milliers de messages)

enregistrer le POSTE PERSONNALISÉ (nommé MAIN_CATEGORY), y compris ces paramètres:

    "supports"      => array('page-attributes'......
    "hierarchical"  => true,

puis, publiez des articles personnalisés comme ceci: (c.-à-d. publiez plusieurs articles personnalisés , nommés . Après cela, lorsque vous publiez un autre article, mais choisissez comme parent.
SUB_CAT_2, SUB_CAT_1..SUB_CAT_2





ps
1) Si vous êtes novice, passez en revue: Enregistrer CUSTOM POST et Enregistrer CUSTOM POST auprès de TAXONOMY
2) si vous avez besoin de la fonction de recherche pour les sous-niveaux, utilisez la requête de recherche personnalisée

T.Todua
la source