• 解決済 吉田 丈治

    (@geeorgey)


    管理画面の記事一覧画面で、チェックを入れた記事のアイキャッチ画像をZIPにまとめて取得したい

    やりたいことはタイトルで書ききっていますが、そんな事を出来ればと思っています。

    可能であれば、管理画面の一括操作ドロップダウンに「ファイルを取得」のようなメニューを追加し、チェックが入ったpostに添付されているファイルを纏めてZIP化してダウンロードしたいと思っているのですが、そのような事は可能でしょうか。

    最近アクションフックの事を知り、カスタム意欲が湧いてきたのですが、いかんせんまだ分からないことが多く、ヒントを頂けると助かります。
    どうぞ宜しくお願いします

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • mocomoco

    (@silent_dandy)

    試したことがないので、できるかどうかはわかりませんが、

    Add a WordPress Custom Bulk Action
    https://www.skyverge.com/blog/add-custom-bulk-action/

    【PHP】めちゃ簡単!複数の画像ファイルをZIPでダウンロードさせる方法!
    http://blog.shuffleee.com/2041/

    この辺をうまい具合に組み合わせればいけそうな気がします。

    トピック投稿者 吉田 丈治

    (@geeorgey)

    >Add a WordPress Custom Bulk Action
    このページありがとうございます。どんなキーワードで検索すればよいか見当もつかなかったので助かりました。
    ZIP圧縮部分は色々と情報が出てくるのですが、アクション部分が分かっておりませんでした。試してみたいと思います。

    トピック投稿者 吉田 丈治

    (@geeorgey)

    解決しました

    先ほど頂いたCustom Bulk Actionという記事から派生したプラグインが提供されており、まずはそちらをインストールしました。

    https://ja.wordpress.org/plugins/custom-bulk-actions/

    使い方はこちらにあります
    https://github.com/Seravo/wp-custom-bulk-actions/

    functions.phpに以下を記載しました。

    //一括ダウンロードスクリプト
    $bulk_actions = new Seravo_Custom_Bulk_Action(array('post_type' => 'ポストタイプを記入'));
    
    //ACTION
    $bulk_actions->register_bulk_action(array(
        'menu_text'=>'一括ダウンロード',
        'admin_notice'=>'ダウンロードが完了しました',
        'callback' => function($post_ids) {
    
            // Zipクラスロード
            $zip = new ZipArchive();
            // Zipファイル名→downloads_年月日.zip
            $zipFileName = 'downloads_'. date("Ymd") . '.zip';
            // Zipファイル一時保存ディレクトリ
            $zipTmpDir = '/tmp/';
    
            // Zipファイルオープン
            $result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
            if ($result !== true) {
            }
    
            // ここでDB等から画像イメージ配列を取ってくる
                    $docPATHarray = array();
            foreach ($post_ids as $post_id) {
                    $docURL = get_post_meta($post_id,'docURL',true);
            // 添付ファイルのURLをfile_urlというカスタムフィールドに保存してありますので、URLをファイルパスに変換しています
                    $docPATH = str_replace("http://your.domain","/var/www/html/your.domain",$docURL);
                    $filename = basename($docPATH);
                    $zip->addFromString($filename,file_get_contents($filepath));
            }
    
            // 処理制限時間を外す
            set_time_limit(0);
    
            $zip->close();
    
            // ストリームに出力
            header('Content-Type: application/zip; name="' . $zipFileName . '"');
            header('Content-Disposition: attachment; filename="' . $zipFileName . '"');
            header('Content-Length: '.filesize($zipTmpDir.$zipFileName));
            echo file_get_contents($zipTmpDir.$zipFileName);
    
            // 一時ファイルを削除しておく
            unlink($zipTmpDir.$zipFileName);
            exit("終了");
    
    }));
    
    //Finally init actions
    $bulk_actions->init();
    //一括ダウンロードスクリプトここまで

    無事に添付ファイルの一括ダウンロードが出来ました。
    アドバイスいただいたmocomocoさんありがとうございました!

3件の返信を表示中 - 1 - 3件目 (全3件中)

トピック「管理画面の記事一覧画面で、チェックを入れた記事のアイキャッチ画像を」には新たに返信することはできません。