2

I want to use built-in WP media gallery. I'm trying to simply add images in one - horizontal line. I want images with original size and without any link. I'm trying to add/edit some code into wp-admin/includes/media.php but I can't get it ;/ I know I have to use size="full" and columns="0" but how to add this with shortcode as default? And I have no idea how to get rid of links under images? Am I looking in good file? If no - point me to right direction please ;)

5 Answers 5

1

UPDATE

I've just submitted a core patch to add link="none" support to the [gallery] shortcode.

ORIGINAL ANSWER

You don't need to hack core to do what you want to do; just use the appropriate [gallery] shortcode parameters, e.g.:

[gallery columns="0" size="full"]

If you want to change the defaults, then use the post_gallery filter:

function mytheme_gallery_shortcode_defaults( $output, $attr ) {
    global $post;
    $attr = array(
        'columns' => '0',
        'size' => 'full'
    );
    return $output;
}
add_filter( 'post_gallery', 'mytheme_gallery_shortcode_defaults', 10, 2 );

The only way to remove the link is to clear the image link field in the Media Library, or you can do some involved code replacement.

EDIT

I'm somewhat guessing here, as I'm not fully familiar with filtering the gallery output. I've made a couple of modifications, including passing both variables to the callback, correcting the add_filter() call to accommodate both variables, and returning $output rather than $attr.

EDIT 2

Okay, so it looks like, currently, the only way to override th shortcode attributes is to rewrite the entire walker. See this Trac Ticket for details.

So, basically, this:

function mytheme_gallery_shortcode( $output, $attr ) {
    global $post, $wp_locale;

    static $instance = 0;
    $instance++;

    // Allow plugins/themes to override the default gallery template.
    $output = apply_filters('post_gallery', '', $attr);
    if ( $output != '' )
        return $output;

    // 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->ID,
        'itemtag'    => 'dl',
        'icontag'    => 'dt',
        'captiontag' => 'dd',
        'columns'    => 0,
        'size'       => 'full',
        'include'    => '',
        'exclude'    => '',
                'link'       => 'none'
    ), $attr));

    $id = intval($id);
    if ( 'RAND' == $order )
        $orderby = 'none';

    if ( !empty($include) ) {
        $include = preg_replace( '/[^0-9,]+/', '', $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) ) {
        $exclude = preg_replace( '/[^0-9,]+/', '', $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);
    $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;
            }
        </style>
        <!-- see gallery_shortcode() in wp-includes/media.php -->";
    $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 ) {
                $image = wp_get_attachment_image( $id, $size, false );
        $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false);
                $image_output = ( 'none' == $attr['link'] ? $image : $link );

        $output .= "<{$itemtag} class='gallery-item'>";
        $output .= "
            <{$icontag} class='gallery-icon'>
                $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;
}
add_filter( 'post_gallery', 'mytheme_gallery_shortcode', 10, 2 );
8
  • I've tried your code and it gives just test "array". When I use code from link You provided then I have large images as I want 2 but there is still no option for adding images without a href
    – smogg
    Jul 19, 2011 at 18:42
  • Okay, see updated answer. You basically will have to rewrite the entire gallery walker. Jul 19, 2011 at 19:24
  • I've tried already to overwrite whole function, but when I try to do this then I cant load page at all (browser displays disconnection error) and I have no idea what is that? I've also tried solution from Mattsatorious Blog with 'link' => 'none' but without any effect.
    – smogg
    Jul 19, 2011 at 19:37
  • "I've tried already to overwrite whole function, but when I try to do this then I cant load page at all (browser displays disconnection error)" - Then you've done something wrong with your callback function, or your add_filer() call. Check for syntax errors, and make sure you're returning the appropriate variable. Jul 19, 2011 at 19:40
  • Going a different route: patching core Jul 19, 2011 at 20:07
1

No

  1. Do not hack core files.
  2. The full size image is an option by default, you can change it under Settings-->Media
  3. To remove the link just delete the field that says "Link URL".
1
  • How exactly can I remove this field without hacking core files?
    – smogg
    Jul 19, 2011 at 18:13
1
[gallery link="file" order="DESC" columns="1" size="full"]

Use Gallery shortcode.

link
you can set it to "file" so each image will link to the image file. The default value links to the attachment's permalink.

include
comma separated attachment IDs, [gallery include="23,39,45"] will show only the images from these attachments.

exclude
comma separated attachment IDs, [gallery exclude="21,32,43"] excludes the images from these attachments. Please note that include and exclude cannot be used together.

1

Insert your photo, click on the image, click on the photo (Edit image) icon that appears on top of your photo, then when the EDIT PHOTO box opens, scroll down and click NONE under the link photo option.

Hope this helps.

0

Alternate approach: use the Cleaner Gallery Plugin.

1
  • Plugin seems to be the best solution, but still doesn't have option to display full images. Also it doesn't make thumbnails but attach width and height style to the full image... How can I remove this styles?
    – smogg
    Jul 20, 2011 at 10:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.