Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have a function in my functions.php file I need to change slightly and am having trouble doing it correctly. This function changes the gallery markup for Wordpress, making it more html5 friendly. It works fine as is, except that I'd like to wrap the entire gallery in a div, for example <div id="sort">. (I want to wrap the gallery, not the entire post.)

I'm having trouble figuring out how to add that to this function:

//Gallery Code Filter
add_filter( 'post_gallery', 'my_post_gallery', 10, 2 );
function my_post_gallery( $output, $attr) {
    global $post, $wp_locale;
    static $instance = 0;
    $instance++;
    // 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'    => 'figure',
        'icontag'    => 'dt',
        'captiontag' => 'figcaption',
        'columns'    => 3,
        'size'       => 'thumbnail',
        'attachment' => 'large',
        'include'    => '',
        'exclude'    => ''
    ), $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}";
    $output = apply_filters('gallery_style', "");
    $i = 0;
    foreach ( $attachments as $id => $attachment ) {
        $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false);
        $output .= "<{$itemtag} class='item'>";
        $output .= "            
                $link
            ";
        if ( $captiontag && trim($attachment->post_excerpt) ) {
            $output .= "
                <{$captiontag}>
                " . wptexturize($attachment->post_excerpt) . "
                </{$captiontag}>";
        }
        $output .= "</{$itemtag}>";
        if ( $columns > 0 && ++$i % $columns == 0 )
            $output .= '';
    }
    $output .= "
            <br>\n";
    return $output;
}
share|improve this question
add comment

1 Answer

up vote 1 down vote accepted

I just added a div to your function see comment in code:

<?php 

add_filter( 'post_gallery', 'my_post_gallery', 10, 2 );
function my_post_gallery( $output, $attr ) 
{
    global $post, $wp_locale;
    static $instance = 0;

    $instance ++;

    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'    => 'figure',
        'icontag'    => 'dt',
        'captiontag' => 'figcaption',
        'columns'    => 3,
        'size'       => 'thumbnail',
        'attachment' => 'large',
        'include'    => '',
        'exclude'    => ''
    ), $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 = '';
        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}";
    $output     = apply_filters( 'gallery_style', '' );
    $i          = 0;

    // The div
    $output .= '<div id="sort">';

        foreach( $attachments as $id => $attachment ) 
        {
            $link = isset( $attr['link'] ) && 'file' == $attr['link'] ? wp_get_attachment_link( $id, $size, false, false ) : wp_get_attachment_link( $id, $size, true, false );

            $output .= "<{$itemtag} class='item'>";
            $output .= "$link";

            if ( $captiontag && trim( $attachment->post_excerpt ) ) 
            {
                $output .= "<{$captiontag}>" . wptexturize( $attachment->post_excerpt ) . "</{$captiontag}>";
            }
            $output .= "</{$itemtag}>";

            if ( $columns > 0 && ++$i % $columns == 0 )
            {
                $output .= '';
            }
        }

        $output .= "<br>\n";

    // End div
    $output .= '</div>';

    return $output;
}
share|improve this answer
    
That's perfect. Thanks! –  Josh Jul 25 '13 at 20:08
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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