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


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