docs.jmini.fr

Les docs Jmini

Les docs jmini regroupent mes notes personnelles plus ou moins détaillées que je souhaite partager. Compilations de liens, tutoriels, réalisations pense-bêtes, morceaux de codes...
Autant d’informations que je retrouve sur mon site et qui pourront vous être utiles. En savoir plus...



Publié par Jérémie Bresson dans les docs Jmini (http://docs.jmini.fr) à l’adresse (http://docs.jmini.fr/code/wordpress-att_link).


Dernière mise à jour : Mardi 14 octobre 2008

[wordpress] Fonctions previous_att_link() et next_att_link()

Depuis la version 2.5 la gestion des pièces jointes a été repensée dans wordpress. Ceci passe notamment par la possibilité d’avoir des pages de pièces jointes. Elles sont gérées par le template : attachment.php.

Dans ce template, les fonctions previous_post_link() et next_post_link() ne fonctionnent pas comme je l’attendais :

  • previous_post_link() : affiche un lien vers l’article «parent» de la pièce jointe
  • next_post_link() : n’affiche jamais rien.

Je voulais pouvoir naviguer à l’intérieur des différentes pièces jointes (dans le cas de plusieurs fichiers joints à un article, je pense par exemple que si l’on affiche la page de présentation de la pièce jointe, il peut être utile de pouvoir naviguer d’une pièce jointe à l’autre sans repasser par l’article)

J’ai donc créé deux nouvelles fonctions :
previous_att_link() et next_att_link() qui fonctionnent exactment comme previous_post_link() et next_post_link()

Télécharger l’archive ou copier le code (présent à la fin de cet article).

Installation :

- copier le contenu du fichier functions.php dans le fichier functions.php du thème ou au début du fichier où la fonction sera utilisée.
- Appeler la fonction dans le template comme c’était le cas avec previous_post_link(). Il est possible de juste remplacer le nom.

Paramètres :

format
(chaîne) [cf previous_post_link()] Chaîne de formatage pour le lien. C’est ici que vous contrôlez ce qui vient avant ou après le lien. ‘%link’ dans la chaîne sera remplacé par ce qui est déclaré comme lien dans le paramètre suivant. ‘Aller à %link’ générera « Aller à <a href=…" Placer des marqueurs HTML ici pour styliser le résultat final. '&laquo; %link' par défaut.
link
(chaîne) [cf previous_post_link()] Texte du lien à afficher. Défini par défaut au titre de l’article précédent (‘%title’).
in_same_mime
(booleen) Permet de n’’afficher que les liens vers les documents de même type (basé sur le type mime)
d2
(chaîne) Non utilisé, permet d’avoir la même signature que previous_post_link()

limitation connue :

Les types mime sont constitués d’un type principal et secondaire (ex : image/jpeg, application/pdf…) seul le type principal est pris en compte. Autrement dit, de nombreux fichiers (ceux qui sont de type principal « application » : xls, pdf, zip…) sont considéré comme du même type.

Le code

<?php
/* previous_att_link() &amp; next_att_link()
 * 2 functions to replace previous_post_link() &amp; next_post_link() in the attachment.php template
 * Require Wordpress 2.5; compatible up to Wordpress 2.6.2
 *
 * Parameters : $format : @see previous_post_link()
 *              $link : @see previous_post_link()
 *              $in_same_mime : only search attachments with the same mime type (subtype is not considered)
 *              $d2 : [not used] preserve the previous_post_link() signature
 *
 * based on previous_image_link() &amp; next_image_link() in wp-include/media.php
 * and previous_post_link() &amp; next_post_link() in wp-include/link-template.php
 *
 * Version 1
 * Copyright 2008 - Jeremie Bresson (email : contact@jmini.fr) - http://jmini.fr
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

function previous_att_link($format='&laquo; %link', $link='%title', $in_same_mime = false, $d2 = '') {
		adjacent_att_link($format, $link, $in_same_mime, true);
}
function next_att_link($format='%link &raquo;', $link='%title', $in_same_mime = false, $d2 = '') {
		adjacent_att_link($format, $link, $in_same_mime, false);
}
// do not call adjacent_att_link directely
function adjacent_att_link($format, $link, $in_same_mime, $previous = true) {
	global $post;
	$post = get_post($post);
	if($in_same_mime) {
		$mime = ereg_replace("/[a-zA-z\.\-]*$","",$post->post_mime_type);
		$attachments = array_values(get_children("post_parent=".$post->post_parent."&amp;post_type=attachment&amp;post_mime_type=".$mime."&amp;orderby=menu_order ASC, ID ASC"));
	}else {
		$attachments = array_values(get_children("post_parent=".$post->post_parent."&amp;post_type=attachment&amp;orderby=menu_order ASC, ID ASC"));
	}
	foreach ( $attachments as $k => $attachment ) {
		if ( $attachment->ID == $post->ID )
			break;
	}
	$k = $previous ? $k - 1 : $k + 1;
	if (! isset($attachments[$k]) )
			return;
	$title = $attachments[$k]->post_title;
	if ( empty($attachments[$k]->post_title) )
		$title = $previous ? __('Previous Post') : __('Next Post');
	$title = apply_filters('the_title', $title, $attachments[$k]);
	$string = '<a href="'.get_permalink($attachments[$k]).'">';
	$link = str_replace('%title', $title, $link);
	$link = $string . $link . '</a>';
	$format = str_replace('%link', $link, $format);
	echo $format;
}
?>

Voir aussi

Les mots-clés de cet article :

Cet article est dans la catégorie : Code

2 commentaires pour “[wordpress] Fonctions previous_att_link() et next_att_link()”

Flux commentaires de ce billet - Adresse du trackback - Laisser un commentaire


  1. Laetitia dit :

    Bonjour Jérémie,

    Je m’intéresse énormément au fonctionnement de tes deux fonctions pour pouvoir naviguer entre les pièces jointes des articles.
    L’as-tu testé sur une version 2.7 de Wordpress ? En les utilisant, les vignettes affichées sont celles de la pièce jointe en cours…
    Merci par avance si tu as une idée pour résoudre le problème.

    Laetitia


  2. Jérémie Bresson dit :

    Je n’ai pas encore testé ces fonctions sur WordPress 2.7 (je vais essayer de le faire rapidement).

    Sur le fonctionnement, ce site utilise ces fonctions. Sur mon article sur la coloration syntaxique est un bon test.

    Lorsque l’on clique sur une des images, on ouvre une des ces pages de pièce jointe. En dessous du nuage de mot, on peut revenir en arrière avec le lien « Pièce jointe de l’article : ‘Coloration syntaxique – Méthodes’ » et on peut naviguer entre les pièces jointe (précédente / suivante).

    Pour ce qui est du mode d’affichage sur une page de pièce jointe, on peut faire pratiquement ce que l’on veut. Cela se passe dans le template attachment.php (j’ai écrit deux articles sur fran6art.com pour expliquer comme cela marche – les liens sont donné dans le paragraphe « guest blogging » de cette page)

Laisser un commentaire

Tous les commentaires sont lus et modérés avant d'être publiés. Merci pour votre compréhension.


© 2007-2017 Jérémie Bresson | jmini.fr | Ce site est sous licence Creative Commons - en savoir plus