Existe-t-il un moyen de contrôler le paramètre par défaut "Lien vers" de la galerie? L'utilisation du filtre image_default_link_type
dans un fichier functions.php
permet d'insérer des images uniques dans les publications, mais cela ne semble pas avoir d'effet sur les galeries ...
Malheureusement, il n’existe aucun moyen légal de le contrôler. Mais il y a une mauvaise façon de le faire ... Si vous sélectionnez cette route, vous devrez alors:
gallery_shortcode
$attr['link']
post_gallery
Le résultat final ressemblera à ceci:
add_filter( 'post_gallery', 'wpse8170_gallery_shortcode', 10, 2 );
function wpse8170_gallery_shortcode( $output, $attr ) {
$post = get_post();
static $instance = 0;
$instance++;
// override default link settings
if ( empty( $attr['link'] ) ) {
$attr['link'] = 'none'; // set your default value here
}
if ( !empty( $attr['ids'] ) ) {
// 'ids' is explicitly ordered, unless you specify otherwise.
if ( empty( $attr['orderby'] ) )
$attr['orderby'] = 'post__in';
$attr['include'] = $attr['ids'];
}
// We're trusting author input, so let's at least make sure it looks like a valid orderby statement
if ( isset( $attr['orderby'] ) ) {
$attr['orderby'] = sanitize_sql_orderby( $attr['orderby'] );
if ( !$attr['orderby'] )
unset( $attr['orderby'] );
}
extract(shortcode_atts(array(
'order' => 'ASC',
'orderby' => 'menu_order ID',
'id' => $post ? $post->ID : 0,
'itemtag' => 'dl',
'icontag' => 'dt',
'captiontag' => 'dd',
'columns' => 3,
'size' => 'thumbnail',
'include' => '',
'exclude' => ''
), $attr, 'gallery'));
$id = intval($id);
if ( 'Rand' == $order )
$orderby = 'none';
if ( !empty($include) ) {
$_attachments = get_posts( array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
$attachments = array();
foreach ( $_attachments as $key => $val ) {
$attachments[$val->ID] = $_attachments[$key];
}
} elseif ( !empty($exclude) ) {
$attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
} else {
$attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) );
}
if ( empty($attachments) )
return '';
if ( is_feed() ) {
$output = "\n";
foreach ( $attachments as $att_id => $attachment )
$output .= wp_get_attachment_link($att_id, $size, true) . "\n";
return $output;
}
$itemtag = tag_escape($itemtag);
$captiontag = tag_escape($captiontag);
$icontag = tag_escape($icontag);
$valid_tags = wp_kses_allowed_html( 'post' );
if ( ! isset( $valid_tags[ $itemtag ] ) )
$itemtag = 'dl';
if ( ! isset( $valid_tags[ $captiontag ] ) )
$captiontag = 'dd';
if ( ! isset( $valid_tags[ $icontag ] ) )
$icontag = 'dt';
$columns = intval($columns);
$itemwidth = $columns > 0 ? floor(100/$columns) : 100;
$float = is_rtl() ? 'right' : 'left';
$selector = "gallery-{$instance}";
$gallery_style = $gallery_div = '';
if ( apply_filters( 'use_default_gallery_style', true ) )
$gallery_style = "
<style type='text/css'>
#{$selector} {
margin: auto;
}
#{$selector} .gallery-item {
float: {$float};
margin-top: 10px;
text-align: center;
width: {$itemwidth}%;
}
#{$selector} img {
border: 2px solid #cfcfcf;
}
#{$selector} .gallery-caption {
margin-left: 0;
}
/* see gallery_shortcode() in wp-includes/media.php */
</style>";
$size_class = sanitize_html_class( $size );
$gallery_div = "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>";
$output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div );
$i = 0;
foreach ( $attachments as $id => $attachment ) {
if ( ! empty( $attr['link'] ) && 'file' === $attr['link'] )
$image_output = wp_get_attachment_link( $id, $size, false, false );
elseif ( ! empty( $attr['link'] ) && 'none' === $attr['link'] )
$image_output = wp_get_attachment_image( $id, $size, false );
else
$image_output = wp_get_attachment_link( $id, $size, true, false );
$image_meta = wp_get_attachment_metadata( $id );
$orientation = '';
if ( isset( $image_meta['height'], $image_meta['width'] ) )
$orientation = ( $image_meta['height'] > $image_meta['width'] ) ? 'portrait' : 'landscape';
$output .= "<{$itemtag} class='gallery-item'>";
$output .= "
<{$icontag} class='gallery-icon {$orientation}'>
$image_output
</{$icontag}>";
if ( $captiontag && trim($attachment->post_excerpt) ) {
$output .= "
<{$captiontag} class='wp-caption-text gallery-caption'>
" . wptexturize($attachment->post_excerpt) . "
</{$captiontag}>";
}
$output .= "</{$itemtag}>";
if ( $columns > 0 && ++$i % $columns == 0 )
$output .= '<br style="clear: both" />';
}
$output .= "
<br style='clear: both;' />
</div>\n";
return $output;
}
Il existe maintenant une solution plus simple:
function my_gallery_default_type_set_link( $settings ) {
$settings['galleryDefaults']['link'] = 'file';
return $settings;
}
add_filter( 'media_view_settings', 'my_gallery_default_type_set_link');
Ils ont ajouté un filtre pour personnaliser cette valeur par défaut (ainsi que d'autres valeurs liées au popup de téléchargement de nouveau média) dans WP 4.0 ( trac ).
Ancienne question mais toujours du trafic de recherche donc pour tout le monde:
Vous pouvez accomplir ce que vous décrivez en filtrant les attributs de shortcode de la galerie. Aussi utile si vous voulez changer la taille d'image par défaut, les colonnes, etc.
function gallery_should_link_to_files($out, $pairs, $atts)
{
$atts = shortcode_atts( array(
'link' => 'file'
), $atts );
$out['link'] = $atts['link'];
return $out;
}
add_filter('shortcode_atts_gallery', 'gallery_should_link_to_files', 10, 3);
Le filtre semble mal documenté dans le Codex: http://codex.wordpress.org/Function_Reference/shortcode_atts_gallery
Néanmoins, l'option permettant de modifier l'attribut 'link' a été ajoutée début 2013: https://core.trac.wordpress.org/changeset/25665/trunk
Ceci est mon exemple de travail pour WordPress 5.0 (Gutenberg)!
function gallery_template_to_posts() {
$post_type_object = get_post_type_object( 'post' );
$post_type_object->template = array(
array( 'core/gallery', array(
'linkTo' => 'media',
) ),
);
}
add_action( 'init', 'gallery_template_to_posts' );
Cela fonctionne. Comme indiqué ci-dessus, dans la barre latérale, la galerie présentera un lien vers la "page de pièce jointe". Cependant, lorsque vous publiez votre message et cliquez sur l'image, vous remarquerez qu'il est en fait lié au fichier multimédia.
J'ai pris ce code un peu plus loin et créé un plugin. C’est une fonctionnalité que je souhaite conserver spécifique au site plutôt que spécifique au thème.
Pour créer le plugin, j'ai suivi les instructions simples sur cette page . J'ai créé un fichier nommé gallery-link-to-file.php
dans le répertoire wp-content/plugins
. J'ai ensuite collé le code ci-dessus et changé $attr['link'] = 'none';
en $attr['link'] = 'file';
J'ai ensuite activé le plugin et cela a fonctionné comme un charme.