I want to create a WordPress shortcode that will add an automated gallery of the contents in a folder. I am currently trying to implement this in a site that publishes 12 annual magazine issues, so as soon as a new PDF or JPG is dropped into a folder, it should be displayed on that specific gallery.


Jan - Dec months need to be displayed, in a 4x3 or 6x2 grid gallery. If we are in June, and the latest issue is June, then only 6 JPGs would be displayed.

This way the client doesn't need to make any modifications in the WordPress site. Instead the client can just drop the files to a specific folder via FTP, and the WordPress PHP function would auto populate the gallery according to what it's able to fetch from that folder's contents.


Unfortunately, the "Folder Gallery" plugin is close but not good enough. It does not read the contents of folders that sit outside the WP uploads folder, and we don't want to migrate the existing folder structure inside the WordPress install folder.

I also need it to open the links in a new window to the PDF of the magazine, and not a larger version of the picture in Fancybox.

  • You may be able to integrate the ImgBrowz0r class which does read the contents of a directory and creates a gallery of preview images in a grid layout.
    – iyrin
    Commented Jun 11, 2013 at 1:20
  • Is there a ImgBrowz0r plugin outhere i can just grab? i am pretty new when it come to php
    – Fred
    Commented Jul 3, 2013 at 18:53
  • Did you ever find a solution? I have a similar situation. Commented Nov 19, 2015 at 15:16

1 Answer 1


It sounds like you just need shortcode to gather the contents of a folder and display a grid of those items. The shortcode is pretty easy to setup.

$gallery = do_shortcode('[folder_gallery title="XYZ" folder="wp-content/uploads/2015/11"]' ); 
echo $gallery; 

Then you just need to glob a directory and render your gallery from the files. I didn't include a gallery but this will work outside of uploads. Just give it a path relative to the root folder.

// [folder_gallery folder="wp-content/uploads/2015/11" ]

add_shortcode( 'folder_gallery', 'folder_gallery__shortcode' );

function folder_gallery__shortcode( $atts ) {
    $a = shortcode_atts(
        array (
            'folder' => '',
            'title'  => '',
        ), $atts );

    $folder = $a [ 'folder' ];

    // bad folder
    if ( empty( $folder ) || ! is_readable(ABSPATH . $folder) ) {
        return 'No Valid Folder Selected';

    // allow filtering of the filetypes
    $filetypes = apply_filters( 'folder_gallery_shortcode__filetypes', array ( 'png', 'jpg', 'jpeg', 'gif' ) );

    // glob
    $filetypes = empty( $filetypes ) ? 'png,jpg,jpeg,gif' : implode( ',', $filetypes );
    $files     = glob( untrailingslashit( ABSPATH . $folder ) . "/*.{" . $filetypes . "}", GLOB_BRACE );

    $gallery_images = array ();
    foreach ( $files as $file ) {
        if ( $file === __FILE__ ) {

        $filetype        = wp_check_filetype( $file );
        $ext             = $filetype[ 'ext' ];
        $type            = $filetype[ 'type' ];
        $proper_filename = $filetype[ 'proper_filename' ];

        // replace the filepath with url path for front-end gallery
        $gallery_images[] = str_replace( trailingslashit( ABSPATH ), trailingslashit( WP_SITEURL ), $file );


    // construct the gallery
    $output = empty( $a[ 'title' ] ) ? '' : '<h2>' . $a[ 'title' ] . '</h2>';
    $output .= '<ul>';

    // Loop through each image in each gallery
    foreach ( $gallery_images as $image_url ) {
        $output .= '<li>' . '<img src="' . $image_url . '">' . '</li>';
    $output .= '</ul>';

    // allow filtering of the output
    $gallery = apply_filters( 'folder_gallery_shortcode__gallery', $output, $gallery_images );

    return $gallery;

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.