0

私は、スプレッドシートからシステムに最大 990 のエントリを取得するワードプレス プロジェクトに取り組んでいます。投稿を作成するための CSV ファイルと、いくつかのカスタム分類法との関連付けを作成することができました。しかし今、私はこのメディアのことを理解しなければなりません。

990 件の投稿。そのほとんどすべてに、画像と動画ファイルを関連付ける必要があります。

csv データをデータベースにインポートするためのプラグインを試しました。wp_postmeta では、関連する投稿 ID、「_wp_attached_file」のメタ キー、およびファイル名でエントリを作成します。また、適切な GUID、post_parent、post_mime_type であるべきものなど、各画像のエントリを posts テーブルに追加しました。

私が用意したテーマは、必要に応じてデータを取得し、表示することができますが、問題はその背後にあります。投稿を編集しようとしましたが、投稿自体を編集してメディアを手動で追加したものでない限り、画像が表示されません。データベースのどこかに欠けているに違いないいくつかの関連付けがありますが、まだ追跡できていません。すべてのエントリを手動で編集するのではなく、SQL を使用してこれを処理する方法が必要です。

私は _wp_attachment_metadata を見ていますが、それが鍵なのだろうか? wp_postmeta と wp_posts のエントリは本当に本質的に無意味で、すべて _wp_attachment_metadata にありますか? 990 (ビデオも、1980) の連載エントリをまとめてハッキングして、それがまだミッシング リンクではないことを発見するのは嫌です。

適切な親を持つ wp_posts と正しい情報を持つ postmeta に画像があります。それでも何かが足りない…。

4

2 に答える 2

0

以下は、私が書いた別のプラグインから取った私のやり方です。これはアップロードされたファイルに使用されます - $file は結果を含む投稿配列です - ただし、ディスクのどこかにファイルがある場合は、$filename をそれに設定できます (move_uploaded_file を削除します)。

    $uploads = wp_upload_dir();

    if ($uploads['error'] != '')
        wp_die($uploads['error']);

    $target_dir = $uploads['path'];

    if (!file_exists ($target_dir))
        mkdir ($target_dir);

    $filename = $file['name'];

    // If you get script file, it's a danger. Make it TXT file.
    if ( preg_match( '/\.(php|pl|py|rb|cgi)\d?$/', $filename ) )
            $filename .= '.txt';

    $new_filename = wp_unique_filename( $target_dir, $filename );
    $new_url = trailingslashit( $uploads['url'] ).$new_filename;
    $new_filename = trailingslashit( $target_dir ) . $new_filename;

    $upload_result[$filename]['new_filename']=$new_filename;

    $upload_result[$filename]['valid'] = false;
    $upload_result[$filename]['reason'] = '';
    $upload_result[$filename]['url'] = $new_url;
    // Detect whether the uploaded file is an image

    $is_image = preg_match ('/(jpeg|png|gif)/i', $file['type']);
    $type = ($is_image) ? "img" : "file";

    if (!$is_image) {
        $upload_result[$filename]['reason'] =  "Sorry, you can only upload images.";
    } else if (move_uploaded_file ($file['tmp_name'], $new_filename)) {
        $upload_result[$filename]['valid'] = true;
        $upload_result[$filename]['reason'] = '';

        // Make sure the uploaded file is only readable for the owner process
        @chmod( $new_file, 0400 );
        //
        // now attach this to the original post - not really required except that it will ensure
        // that the image shows up on the right place in the media library and when viewing the post.
        $wp_filetype = wp_check_filetype(basename($new_filename), null );
        $attachment = array(
            'post_mime_type' => $wp_filetype['type'],
            'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
            'post_content' => '',
            'post_status' => 'inherit'
            );
        $attach_id = wp_insert_attachment( $attachment, $new_filename, $commentData['comment_post_ID'] );

        // need to include the image.php file so  function wp_generate_attachment_metadata() works
        require_once(ABSPATH . 'wp-admin/includes/image.php');

        $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
        wp_update_attachment_metadata( $attach_id, $attach_data );
于 2013-06-07T14:46:53.757 に答える