画像を一括でアップロードし、それぞれに自動的に同時に投稿を作成するにはどうすればよいですか?


10

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

システム全体が一度に1つずつアセットを作成するのに適していますが、時間がかかりすぎます。複数の画像を一度に「一括」アップロードし、各画像に対して新しい投稿を作成し、その画像を「注目の画像」として新しい投稿に添付できるようにする必要があります。

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

XML-RPCポスト作成(通常はイメージのアップロード/割り当てを処理しない)からサーバーディレクトリからメディアライブラリ(ポスト作成をカバーしない)にファイルをプルするプラグイン、およびjquery複数ファイルへのソリューションを調査しましたアップローダー(基本的にはディレクトリにファイルをダンプするだけ)。

私は比較的phpに精通しており、プラグインとテーマを構築していますが、このプロセスを処理する方法に困っています。一時的な容量でファイルをサーバーに取得し、ファイルに基づいて投稿を生成する最初の手順が必要になるためです。アップロードし、特定のメタデータをバッチ全体に割り当てます。

これがカスタム管理パネルで実行できることを願っていますが、wp-adminの外部でこれを実行する必要がある場合も問題ありません...

アイデア?


これに対する答えを見つけたことがありますか?これは私にとって完璧でしょう...

私はそうしました...しかし、シナリオはプロジェクトの完全なフレームワークプラグインに進化しました。それは特定の短い答えではありません-私は複数の関数とフックが一緒にこれを達成するフローを文書化する必要があります。
体細胞

1
要約すると、編集上の理由から、ユーザーがアップロードしたすべての投稿を実際に生成するのは意味がありませんでした。代わりに、ユーザーはすべての画像を1つの「バッチ」投稿に添付ファイルとしてアップロードします。次に、バッチが確認され、各添付ファイルが受け入れられます/拒否されます-そして、その「バッチ」投稿が実際に公開されると、カスタム保存ルーチンは、受け入れられた各添付ファイルを取得し、wp_insert_post()を使用して、その単一の添付ファイルのみを特徴とする投稿を作成します画像。
体細胞


メタデータはどのように追加していますか、画像はデータにどのように関連付けられていますか?
Wyck 2013

回答:


5

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

プラグインページから:

自動注目画像投稿では、画像がアップロードされるたびに、注目画像を含む新しい投稿が作成されます。プラグイン設定ページを使用して、画像をパブリッシュするように設定し、他の既存のカスタム投稿タイプや投稿形式に割り当てることができます。

基本的に、アップロードされたすべての画像は(選択した投稿タイプの)投稿を生成し、その投稿の注目画像として設定されます。

これを自分のローカルマシンにインストールしました。設定ページは次のようになり、カスタム投稿タイプを含む写真のアップロードを割り当てる投稿タイプと、必要な公開ステータスを選択できます。

プラグインのスクリーンショット

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

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

ここに画像の説明を入力してください

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

ローカルでテストしましたが、Wordpress 3.6で動作しています。

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

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

注:すべてのimage_sizesがfunctions.phpに設定されていることを確認してください。画像サイズを忘れたか変更しただけで、10,000枚の写真を元に戻す/削除したり、非常に長い「サムネイルの再生成」を実行したりしたくありません。


反対票を投じるときはコメントする必要があります。サイトの品質を向上させる方がはるかに役立ちます。
timshutes 2013

5

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

  1. それを使用するwp_insert_postので、管理フックにフックしないでください、一度だけ実行してください!
  2. 画像はwp-content\uploadsフォルダ内にある必要があります。これを変更すると、ジャンプするためにさらに多くのフープが必要になります。この例では\images、uploadsフォルダーで呼び出されるカスタムフォルダーを使用していますが、この部分を変更できます。
  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 );
    }   
}

数千を超える画像については、おそらく以下を使用するほうが簡単です。


サイズ変更された画像をアップロード/画像フォルダに追加し続け、そのために新しい投稿を生成します。プロセスが再帰的になったため、関数を削除する前に、800近くの投稿が作成されました。生成される新しいサイズは、通常のwpメディアの場所で実行する必要があります。
Heena Shah

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.