0

以下のコードは、 を含む最初の画像のみを投稿することを除いて、問題なく動作しますmain_。「main_」という単語を含む列の値を取得する必要があるため、複数の画像を投稿できます。したがって、3 つ以上の画像がある場合main_img_url、ループはこれを認識し、それに応じて追加する必要があります。画像の場所を以下に示します。ハンドラの開始と終了。

CSV の例を次に示します。

post_title, post_content, main_img_url, main_img_url

これが私のコードです:

function app_csv_to_array($file = '', $delimiter = ',') {
    if(!file_exists($file) || !is_readable($file))
        return false;
    $header = NULL;
    $data = array();
    if(false !== $handle = fopen($file, 'r')) {
        while(false !== $row = fgetcsv($handle, 1000, $delimiter)) {

            if($header)
                $data[] = array_combine($header, $row);
            else
                $header = $row;
        }
        fclose($handle);
    }
    return $data;
}


    function process($file) {
        $rows = $this->app_csv_to_array($file);
        foreach($rows as $row) {
            $post['post_title'] = sanitize_text_field($row['post_title']);
            $post['post_content'] = sanitize_text_field($row['post_content']);
            $post['post_status'] = 'publish';
            $post['post_author'] = 658;

        $post_id = wp_insert_post($post);
        //////////////// I want the loop to start here   //////////////////
            foreach($row as $key => $val) {
              if(strstr($key, 'main_')) {
                $tmp = download_url( $file );
                preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $file, $matches);
                $filename = strtolower(basename($matches[0]));
                  } 
            }
//////////////// ends here   //////////////////
        }
    }
4

1 に答える 1

1

あなたの問題はapp_csv_to_arrayメソッド内にあり、具体的にはarray_combine.

ドキュメント に基づいてarray_combine、最初のキーの値と 2 番目の値の値を持つ 2 つの入力配列から 1 つの連想配列を作成します。

キーはcsvファイルのヘッダーであるため:

post_title, post_content, main_img_url, main_img_url

最終的に返される結果の配列には main_img_url、キーとして 1 つのスロットしかありません。

この問題を回避する方法は、csv ファイルのヘッダーが一意であることを確認し、同時にstrstr($key, 'main_')列の内容と一致させることです。何かのようなもの:

post_title, post_content, main_img_url1, main_img_url2
于 2012-08-01T12:20:14.217 に答える