web-dev-qa-db-fra.com

récupère les archives de terme url/link

J'ai créé des types de post personnalisés et des taxonomies personnalisées pour ceux-ci.

Exemple: actors (taxonomie) pour movies (type de message).

Maintenant, je veux afficher dans mon widget des termes et un lien more pour l'archive actors termes.

Comment puis-je obtenir le lien/l'URL des archives de taxonomie?

4
mrzmyr

Utilisez get_term_link

par exemple. pour imprimer une liste de termes d'acteurs liés aux archives:

$terms = get_terms('actors');
echo '<ul>';
foreach ($terms as $term) {
    echo '<li><a href="'.get_term_link($term).'">'.$term->name.'</a></li>';
}
echo '</ul>';

Toutefois!

Si ce que vous voulez vraiment dire est l'équivalent de l'archive de type de publication personnalisée, cela répertorie toutes les publications de ce type, mais pour les termes de taxonomie, par exemple. une page qui sert d'archive énumérant les différents termes de taxonomie disponibles, alors vous n'avez pas de chance. Il n'y a pas d'archives de taxonomie dans WordPress pour les termes, mais uniquement pour les publications affectées à un terme donné.

Pour produire une page répertoriant les termes de taxonomie, vous pouvez utiliser un code similaire à celui ci-dessus. Ensuite, placez-le dans un modèle de page et utilisez cette page comme archive de termes de taxonomie.

La raison en est que le problème réside dans la boucle de publication, presque tous les modèles de page sont destinés à en avoir un, et si vous regardez la hiérarchie des modèles, si les modèles nécessaires ne sont pas trouvés, tout retourne à index.php et index.php a une boucle de publication qui affiche les publications, pas une boucle de terme. Ceci et les nombreuses manières différentes et idées sur la manière dont les termes doivent être listés signifie qu'il n'y a pas de consensus. Qu'en est-il des archives de date? Devrait-il y avoir une archive répertoriant les mois et les années? Les délais? Panneaux tuiles nuages ​​etc

10
Tom J Nowell

Il n’existe pas de moyen simple d’obtenir cela en nettoyant. Et tous ceux qui répondent partout pensent que vous souhaitez créer un lien vers un terme dans TAXONOMY ... Alors que vous souhaitez obtenir un lien vers les archives de TAXONOMY ... Pour lesquelles je n'ai absolument rien trouvé.

Fondamentalement, comme beaucoup de gens, vous voulez une méthode get_taxonomy_archive_link.

Sauf que, pour une raison ou une autre, cela n'existe tout simplement pas. Je considère cela comme un échec majeur du côté de Wordpress.

Il n'y a pas de réponse à votre question. Pas une solution qui fonctionne réellement dans le cadre WP. Bien sûr, vous pouvez assembler get_bloginfo() selon vos besoins, mais il n'y a absolument aucune raison logique dans WP que get_taxonomy_archive_link n'existe pas.

Ceci dit, j’ajoute toujours la fonction suivante à mes thèmes:

/**
 * Pass in a taxonomy value that is supported by WP's `get_taxonomy`
 * and you will get back the url to the archive view.
 * @param $taxonomy string|int
 * @return string
 */
function get_taxonomy_archive_link( $taxonomy ) {
  $tax = get_taxonomy( $taxonomy ) ;
  return get_bloginfo( 'url' ) . '/' . $tax->rewrite['slug'];
}
7
pixelbacon

il semble que vous demandiez un lien vers une archive contenant "tous les messages contenant un terme quelconque de la taxonomie Actors" . Tout le monde ici a répondu comme si vous aviez demandé le lien vers une archive de termes spécifiques, car ce que vous demandez n'a pas de sens dans le monde de wordpress.

Je suis surpris par la réponse de pixelbacon et par le fait qu’il dispose de 6 votes positifs ... Cette fonction renvoie une URL qui ne mène nulle part ... wordpress n’a aucun moyen d’interpréter cette URL ni de faire la requête qui devrait être effectuée. être derrière cette demande.

dans la base de données, une taxonomie a des relations avec les termes et les termes ont des relations avec les posts. Un seul poste n'a pas de relations avec la taxonomie. La seule chose qui les relie est le fait qu'un post-type pourrait supporter une taxonomie.

Écrivons avec des mots ce que vous essayez d'afficher dans cette page: "Montrez-moi tous les messages de type" post ", qui contient N'IMPORTE QUEL terme, de la taxonomie Actors."

cela se traduit essentiellement par: "affichez-moi tous les messages du type post" type "(qui prend en charge la taxonomie Actors)" .

Par conséquent, la seule différence par rapport à une archive post_type générale (afficher toutes les publications d’un post_type donné) serait SI vous avez des publications qui n’ont pas de terme Acteur attribué et que vous NE souhaitez PAS les exclure.

Si tel est le cas, vous pouvez alors créer une page personnalisée, créer une requête générique pour toutes les publications, puis vérifier dans la boucle si la publication contient un terme Actors avec wp_get_post_terms(get_the_ID(), 'actors') et éventuellement l'exclure, le cas échéant.

2
Pikkio

Le lien d'archive pour n'importe quelle taxonomie suit ce modèle:

http://{siteurl}/{taxonomy}/{term}

Par exemple, la catégorie "nouvelles" sur "myblogsite.com" aurait l'URL d'archive suivante:

http://myblogsite.com/category/news

Ainsi, les archives "Harrison Ford" dans votre taxonomie actors seraient:

http://myblogsite.com/actors/harrison-ford
1
EAMann

utilisez get_term_link () :)

EDIT:

Cela peut être utile: lien d’archive pour la taxonomie: get_the_term_list () . Du codex:

Renvoie une chaîne HTML de termes de taxonomie associés à une publication et à une taxonomie donnée. Les termes sont liés à leurs pages respectives.

il doit donc être lié à un identifiant de publication, mais archiver les termes de taxonomie.

1
moraleida

Lorsque vous créez votre taxonomie personnalisée, vous pouvez y ajouter l’attribut rewrite. Cet attribut pourrait définir un slug de réécriture pour votre taxonomie que vous pouvez utiliser pour le lien:

register_taxonomy('actors', 'movies', array(
    // ...
    'rewrite' => array( 'slug' => 'actors' ),
    // ...
));

Donc, pour créer un lien pour créer le lien d’archive taxonomie, vous pouvez utiliser le modèle suivant:

http://mysite.com/actors/actor-name
1
Eugene Manuilov