web-dev-qa-db-ja.com

画像を一括アップロードして、それぞれの画像に同時に投稿を自動的に作成する方法を教えてください。

複数の画像を既存の投稿にアップロードする方法を知っていますが、これは別のシナリオです。これはアセットの大規模なカタログ用で、各カスタム投稿タイプの投稿は画像アセットを表します(したがって、単一の画像が各投稿の「おすすめ画像」として割り当てられます)。

システム全体は、一度に1つずつ資産を作成するのに最適ですが、時間がかかりすぎます。一度に複数の画像を「一括」アップロードしてから、各画像用に新しい投稿を作成し、その画像を「おすすめの画像」として新しい投稿に添付する必要があります。

各投稿にテキストコンテンツは入力されません。メタデータとカスタム分類の割り当てがいくつかあるだけなので、このバッチ作成プロセス中にメタデータと分類をバッチ割り当てすることは可能です。

私はXML-RPC投稿作成(通常は画像のアップロード/割り当てを処理しない)からファイルをサーバーディレクトリからメディアライブラリに引っ張るプラグイン(投稿作成は対象外)、および複数ファイルのjqueryの解決策を研究しました。アップローダ(基本的にはディレクトリ内のファイルをダンプするだけです)。

私はプラグインとテーマを構築したことで、phpには比較的精通していますが、一時的な容量でファイルをサーバーに送信し、それからファイルに基づいて投稿を生成するという最初のステップが必要です。アップロードし、バッチ全体に識別用のメタデータを割り当てます。

私はこれがカスタム管理パネルで行われることを望みます、しかし私がwp-adminの外でこれをしなければならないならば、それも大丈夫です...

アイデア?

10
somatic

このプラグインがあります: 自動注目の画像投稿プラグイン

プラグインページから:

自動おすすめ画像投稿は、画像がアップロードされるたびに、おすすめ画像を含む新しい投稿を作成します。プラグイン設定ページで、公開する画像を設定し、他の既存のカスタム投稿タイプや投稿フォーマットに割り当てることができます。

基本的に、アップロードされたすべての画像は(あなたが選んだ投稿タイプの)投稿を生成し、その投稿のおすすめ画像として設定されます。

私はこれを私のローカルマシンにインストールしました。設定ページはこのように表示され、カスタム投稿タイプを含め、どの投稿タイプに写真のアップロードを割り当てるか、およびどの公開ステータスを希望するかを選択できます。

Screenshot of plugin

プラグインを実用化するには - 選択した投稿タイプに移動し、新しい投稿を開いてメディアをアップロードします。

写真を一括アップロードするには、[アップロード]ダイアログボックスで複数の写真をハイライトします。ここでは8枚の写真を強調していますが、ワードプレスの画像アップローダで知らない制限がない限り、80枚や800枚にならない理由はありません。

enter image description here

投稿のタイトルは画像ファイル名によって設定されます。あなたはそれを使って作業し、あなたのテーマの中でそれらをthe_title()と呼ぶことができるはずです。

私はローカルでテストしました、そしてそれはWordpress 3.6で働いています。

これを達成するためのより堅牢で柔軟な方法があると私は確信していますが、この場合、プラグインはメタデータを割り当てることを除いて、あなたが求めていることを正確に実行するようです。多分他の誰かがその一部を肉付けすることができます。

動的に生成された投稿コンテンツが必要な場合は、少なくともプラグインから始めて、そこから繰り返すことができます。投稿の表示方法を決定するには、投稿フォーマットまたはページテンプレートを使用することが考えられます。

注: すべてのimage_sizeがfunctions.phpに設定されていることを確認してください。 1万枚の写真を元に戻す/削除したり、画像サイズを忘れたり変更したりしたからといって、非常に長い "サムネイルを再生成"する必要はありません。

5
timshutes

このスクリプトは概念の証明(テスト済みで動作中)です。プラグインではなく、ハッキングされることを意図しています。いくつかのことを前提としています。

  1. これはwp_insert_postを使用するので、管理フックにフックしないことをお勧めします。一度だけ実行してください。
  2. 画像はwp-content\uploadsフォルダにある必要があります。これを変更すると、ジャンプするにはさらにフープが必要になります。この例では、uploadsフォルダ内の\imagesというカスタムフォルダを使用しています。この部分は変更できます。
  3. それは少しのエラーチェックもしません、結果が異なるかもしれないように私は20のイメージを含むフォルダーでそれをテストしました:)

以下のコードはwp-content\uploads\imagesフォルダを繰り返し処理し、添付されている画像の名前に基づいて投稿のタイトルを作成します。あなたはおそらくこれをもっと良いものに変更したいと思うか、あなたが持っている他のデータを使ってメタデータを入力することができます(Exifかもしれません)。

function WPSE_1595_image_post() {

    // We need to use the default uploads dir
    $wp_upload_dir =  wp_upload_dir();
    // The actual folder
    $wp_upload_images = $wp_upload_dir['basedir'] . '/images';

    require_once(ABSPATH . 'wp-admin/includes/image.php');

    foreach (new DirectoryIterator($wp_upload_images) as $fileInfo) {

        if($fileInfo->isDot()) continue;

        $image_base = $fileInfo->getFilename();
        $image_name = pathinfo($fileInfo, PATHINFO_FILENAME);

        //Customize this post data as you wish
        $my_post_data = array(
            'post_title' => $image_name,
            'post_type' => 'post',
            'post_category' => array('1'),
            'post_author'   => 1,
            'post_status' => 'publish'
        );

        // We need the ID for the attachment
        $post_id = wp_insert_post($my_post_data);

        $wp_filetype = wp_check_filetype($image_base, null );

         //Customize this attachment data as you wish
        $attachment = array(
             'guid' => $wp_upload_dir['url'] . '/' . $image_name, 
             'post_mime_type' => $wp_filetype['type'],
             'post_title' => 'child-' . $image_name,
             'post_content' => '',
             'post_status' => 'inherit'
        );

        $imagefile = $wp_upload_images . '/' . $image_base;
        $attach_id = wp_insert_attachment( $attachment, $imagefile, $post_id );
        $attach_data = wp_generate_attachment_metadata( $attach_id, $imagefile );

        wp_update_attachment_metadata( $attach_id, $attach_data );
    }   
}

数千枚を超える画像の場合は、おそらく使いやすいでしょう。

5
Wyck

"クリーンアップアップロードフォルダ、メディアライブラリのdb構造" Questionには、関連する可能性があるプラグインの提案がいくつかあります - ただし、それはあなたが要求したことを正確にはしていません。しかし、その情報は役に立つかもしれません。

1
hakre