5

特定の日付に公開された特定のカスタム分類内の投稿に添付されたすべての画像をクライアントがダウンロードできるようにするスクリプトに取り組んでいます。

を含む新しい管理ページを作成しましたform。分類法と日付を選択して、フォームを送信できます。

次に、フォームはurl、特定の画像サイズ (1920px) のすべての を取得しようとするスクリプトに投稿します。これまでのところ、投稿を取得するためにループを実行してから、db一致する添付ファイルを取得するための呼び出しを実行していますID

urlしかし、これらの画像の を配列内に取得して、ユーザーが圧縮してダウンロードできるようにする方法については、少し行き詰まっています。

これまでのスクリプトのコードは次のとおりです。

(create_zip関数から: http://davidwalsh.name/create-zip-php )

/* creates a compressed zip file */
function create_zip($files = array(),$destination = '',$overwrite = false) {

    //if the zip file already exists and overwrite is false, return false
    if(file_exists($destination) && !$overwrite) { return false; }
    //vars
    $valid_files = array();
    //if files were passed in...
    if(is_array($files)) {
        //cycle through each file
        foreach($files as $file) {
            //make sure the file exists
            if(file_exists($file)) {
                $valid_files[] = $file;
            }
        }
    }

    //if we have good files...
    if(count($valid_files)) {
        //create the archive
        $zip = new ZipArchive();
        if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
            return false;
        }
        //add the files
        foreach($valid_files as $file) {
            $zip->addFile($file,$file);
        }
        //debug
        //echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;

        //close the zip -- done!
        $zip->close();

        //check to make sure the file exists
        return file_exists($destination);

    } else {

        return false;
    }

}

?>

(画像を取得するコード)

<?php

    // get things from the form
    $club = $_POST['club'];
    $day = $_POST['day'];
    $month = $_POST['month'];
    $year = $_POST['year']; 


    // run the loop 
    $loop = new WP_Query( array( 
        'post_type' => 'sell_media_item',
        'collection' => $club,
        'include_children' => false,
        'year' => $year,
        'monthnum' => $month,
        'day' => $day,
        'fields' => 'ids',
    ) );

    if ( $post_ids = $loop->get_posts() ) {

        $post_ids = implode( ',', $post_ids );
        $atts_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_parent IN($post_ids) AND post_type = 'attachment'" );   

        $images->query( array(
            'post_mime_type' =>'image',
            'post_status' => 'published',
            'post_type' => 'attachment',
            'post__in' => $atts_ids,
        ));

    }


    //////////////////////////////////////////////
    // something here to get the image url's?
    /////////////////////////////////////////////


    // prep the files to zip
    $files_to_zip = array(
        'src/to/files.jpg'
    );

    // zip 'em!
    $result = create_zip($files_to_zip,'vip-download.zip');


?>

1920px の特定の画像サムネイル サイズの URL を zip ファイル配列に取得する方法についてのアイデアはありますか?

4

1 に答える 1

2

WordPress は各画像の完全な URL を返すため、これらの URL を ZIP ファイルに追加するには、これらの URL を内部パスに変換する必要があります。

WordPress の URL を内部サーバー パスに変換する方法は次のとおりです。

function convert_upload_url_to_path($url) {

    $path = $url;

    $upload_dir_infos = wp_upload_dir();
    $upload_url = $upload_dir_infos['baseurl']; // http://example.com/wp-content/uploads 
    $upload_path = $upload_dir_infos['basedir']; // C:\path\to\wordpress\wp-content\uploads 

    // Step 1: remove $upload_url
    $path = str_replace($upload_url, '', $path);

    // Step 2: prepend $upload_path
    $path = $upload_path.$path;

    return $path;
}

各添付画像から実際の URL を取得するには、wp_get_attachment_image_src($attachment_id, $size);関数を使用します。

最初のパラメーターは添付ファイル ID で、2 番目 (オプション) は必要な画像サイズです。画像への URL が返されます。

$atts_ids変数を使用した例を次に示します。

$files_to_zip = array();
foreach ($atts_ids as $attachement_id) {

    $image_info = wp_get_attachment_image_src($attachement_id, 'full');
    $image_url = $image_info[0];
    $image_path = convert_upload_url_to_path($image_url);

    $files_to_zip[] = $image_path;
}

// zip 'em!
$result = create_zip($files_to_zip,'vip-download.zip');

$sizeパラメータを指定しても、画像のサイズは変更されないことに注意してください。代わりに、すでに利用可能な最も近いサイズを返します。最大サイズでアップロードされた元の画像を取得したい場合は、 を指定するだけ'full'です。WordPress ダッシュボード > 設定 > メディアで目的のカスタム サイズを設定することにより、アップロードされた画像のサイズを変更するように WordPress を設定できます (アップロードの完了時に行われます) 。

于 2013-09-05T13:23:46.737 に答える