web-dev-qa-db-fra.com

Galerie automatique à partir du contenu du dossier

Je veux créer un shortcode WordPress qui ajoutera une galerie automatisée du contenu d'un dossier. J'essaie actuellement de le mettre en œuvre sur un site qui publie 12 numéros de magazine annuels. Ainsi, dès qu'un nouveau PDF ou JPG est déposé dans un dossier, il doit être affiché sur cette galerie spécifique.

Sens:

Archiver
2013
Les mois de janvier à décembre doivent être affichés dans une galerie de grille 4x3 ou 6x2. Si nous sommes en juin et que le dernier numéro en date est juin, alors seulement 6 JPG seront affichés.

De cette façon, le client n'a pas besoin de faire de modifications dans le site WordPress. Au lieu de cela, le client peut simplement déposer les fichiers dans un dossier spécifique via FTP, et la fonction WordPress PHP remplirait automatiquement la galerie en fonction de ce qu’elle pourrait extraire du contenu de ce dossier.

MODIFIER

Malheureusement, le plugin "Folder Gallery" est proche mais pas assez bon. Il ne lit pas le contenu des dossiers situés en dehors du dossier WP uploads, et nous ne souhaitons pas migrer la structure de dossiers existante dans le dossier d'installation de WordPress.

J'en ai aussi besoin pour ouvrir les liens dans une nouvelle fenêtre du PDF du magazine, et non d'une version plus grande de l'image dans Fancybox.

1
Fred

Il semble que vous ayez juste besoin d'un shortcode pour rassembler le contenu d'un dossier et afficher une grille de ces éléments. Le shortcode est assez facile à installer.

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

Ensuite, il vous suffit de glob un répertoire et de rendre votre galerie à partir des fichiers. Je n'ai pas inclus de galerie mais cela fonctionnera en dehors des téléchargements. Donnez-lui simplement un chemin relatif au dossier racine.

// [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__ ) {
            continue;
        }

        /*
        $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 );
    }

    // TODO: IMPLEMENT YOUR GALLERY HERE

    // 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;
}
1
jgraup