web-dev-qa-db-ja.com

フォルダの内容からオートギャラリー

フォルダ内のコンテンツの自動ギャラリーを追加するWordPressのショートコードを作成したいです。私は現在、年12回発行する雑誌を発行するサイトにこれを実装しようとしています。そのため、新しいPDFまたはJPGがフォルダにドロップされるとすぐに、そのギャラリーに表示されます。

意味:

アーカイブ
2013
1月 - 12月は、4 x 3または6 x 2のグリッドギャラリーに表示する必要があります。私たちが6月で、最新号が6月の場合、6つのJPGしか表示されません。

このようにして、クライアントはWordPressサイトを修正する必要がありません。代わりに、クライアントはFTPを介してファイルを特定のフォルダにドロップするだけでよく、WordPress PHP関数はそのフォルダのコンテンツから取得できる内容に従ってギャラリーに自動的にデータを追加します。

_編集_

残念ながら、 "Folder Gallery"プラグインは近いですが十分ではありません。 WP uploadsフォルダの外側にあるフォルダの内容は読み込まれません。また、WordPressのインストールフォルダ内の既存のフォルダ構造を移行することはしたくありません。

私はまた、新しいウィンドウでリンクを開いて雑誌のPDFへのリンクを開く必要があります。Fancyboxの画像の拡大版ではありません。

1
Fred

フォルダの内容を収集してそれらの項目のグリッドを表示するためのショートコードが必要なだけのようです。ショートコードは設定がとても簡単です。

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

それから、ディレクトリを glob にしてファイルからギャラリーをレンダリングするだけです。私はギャラリーを含めませんでした、しかしこれはアップロードの外でうまくいくでしょう。ルートフォルダからの相対パスを指定するだけです。

// [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