Gibt es eine Möglichkeit, die Standardeinstellung der Galerie für "Verknüpfen mit" zu steuern? Die Verwendung des image_default_link_type
-Filters in einer functions.php
-Datei funktioniert beim Einfügen einzelner Bilder in Posts, scheint jedoch keine Auswirkungen auf Galerien zu haben ...
Leider gibt es keine legale Möglichkeit, dies zu kontrollieren. Aber es gibt einen schmutzigen Weg, dies zu tun ... Wenn Sie diese Route auswählen, müssen Sie:
gallery_shortcode
Funktion$attr['link']
hinzupost_gallery
-Filter einDas Endergebnis wird so aussehen:
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;
}
Es gibt jetzt eine einfachere Lösung:
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');
Sie haben in WP 4.0 ( trac ) einen Filter hinzugefügt, um diesen Standardwert (und andere Werte im Zusammenhang mit dem neuen Medien-Upload-Popup) anzupassen.
Alte Frage, aber immer noch Suchanfragen, also für alle anderen:
Sie können das, was Sie beschreiben, erreichen, indem Sie die Shortcode-Attribute der Galerie filtern. Auch nützlich, wenn Sie die Standardbildgröße, -spalten usw. ändern möchten.
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);
Der Filter scheint im Codex schlecht dokumentiert zu sein: http://codex.wordpress.org/Function_Reference/shortcode_atts_gallery
Dennoch wurde Anfang 2013 die Option zum Ändern des Attributs "Link" hinzugefügt: https://core.trac.wordpress.org/changeset/25665/trunk
Dies ist mein Arbeitsbeispiel für 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' );
Es funktioniert tatsächlich. Wie oben angegeben, sieht es in der Seitenleiste so aus, als würde die Galerie auf "Anhangsseite" verlinken. Sobald Sie jedoch Ihren Beitrag veröffentlichen und auf das Bild klicken, werden Sie feststellen, dass er tatsächlich mit der Mediendatei verknüpft ist.
Ich bin diesen Code noch einen Schritt weiter gegangen und habe ein Plugin erstellt. Dies ist eine Funktionalität, die ich nicht themenspezifisch, sondern sitespezifisch beibehalten möchte.
Um das Plugin zu erstellen, habe ich die einfachen Anweisungen auf dieser Seite befolgt. Ich habe eine Datei mit dem Namen gallery-link-to-file.php
im Verzeichnis wp-content/plugins
erstellt. Ich habe dann den obigen Code eingefügt und $attr['link'] = 'none';
in $attr['link'] = 'file';
geändert
Ich habe dann das Plugin aktiviert und es hat wie ein Zauber funktioniert.