web-dev-qa-db-fra.com

Supprimer la base de taxonomie ou le terme de l'URL

Je sais qu'il y a beaucoup de messages à ce sujet ici, mais AUCUN d'entre eux n'a répondu à mon problème.

Je travaille avec un thème construit personnalisé qui a un type de catégorie personnalisé (nommé messagetypes). J'ai une catégorie créée nommée média. Ce thème est configuré pour que je puisse ajouter un élément de menu qui, une fois cliqué, affiche tous les éléments étiquetés média, mais l'URL de la page est alors mysite.com/messagetypes/media. Je veux supprimer messateypes de l'URL et ne l'avoir que mysite.com/media.

Le plus proche que j'ai eu est quand j'ajoute à la page des fonctions de catégorie personnalisées, où

register_taxonomy( 'messagetypes', ...

est appelé avec

'rewrite' => array( 'slug' => ''),

Lorsque je fais cela, j’obtiens le résultat souhaité sur cette page, mais tous mes autres liens de page se cassent (utilisation de permaliens.)

J'ai également essayé d'ajouter au tableau de réécriture

'with_front' => false

mais cela n'a pas fonctionné non plus.

Toute aide ou idée serait formidable. J'ai perdu trop d'heures à ce sujet et cela me rend fou.

Merci.

6
danstever

Lorsque je fais cela, j’obtiens le résultat souhaité sur cette page, mais tous mes autres liens de page se cassent (utilisation de permaliens.)

Parce que, tout simplement, WordPress n'a pas la moindre idée que vous demandiez une page. C'est faire ce que vous lui avez dit de faire;

Pour toutes les URL ressemblant à http://example.com/X, recherchez les publications avec les types de message X.

C'est pourquoi vous avez besoin de l'identifiant. afin qu'il puisse distinguer la différence entre les demandes de pages, archives, catégories ...

Si vous voulez vraiment cette fonctionnalité, il serait judicieux d’ajouter des règles de réécriture prolixes en haut de la carte de réécriture;

add_rewrite_rule( 'media/?$', 'index.php?messagetypes=media', 'top' );

Si vous avez beaucoup de types de messages, vous pouvez vous intéresser à la création et à la suppression de termes et mettre à jour et effacer dynamiquement les règles de réécriture.

Sinon, répétez l'exemple pour chaque terme de votre functions.php, puis videz vos permaliens (visitez la page des options de permalien dans admin).

Une dernière chose, rétablissez votre appel register_taxonomy à normal ", c’est-à-dire omettez l’argument rewrite et utilisez le filtre term_link pour permuter nous-mêmes le permalien personnalisé;

function __custom_messagetypes_link( $link, $term, $taxonomy )
{
    if ( $taxonomy !== 'messagetypes' )
        return $link;

    return str_replace( 'messagetypes/', '', $link );
}
add_filter( 'term_link', '__custom_messagetypes_link', 10, 3 );
10
TheDeadMedic