web-dev-qa-db-ja.com

APIで投稿に画像を挿入する

以下のコードを使用することで、新しい投稿を作成し、フォームの送信データを通じて添付ファイルとしてwordpressのuploadディレクトリに画像をアップロードできます。

    $new_post = array(
        'post_title' => $title,
        'post_content' => $content,
        'post_status' => 'publish',
        'post_date' => date('Y-m-d H:i:s'),
        'post_author' => $user_ID,
        'post_type' => 'post',
        'post_category' => array(3)
    );
    $post_id = wp_insert_post($new_post);

    if (!function_exists('wp_generate_attachment_metadata')){
        require_once(ABSPATH . "wp-admin" . '/includes/image.php');
        require_once(ABSPATH . "wp-admin" . '/includes/file.php');
        require_once(ABSPATH . "wp-admin" . '/includes/media.php');
    }
    if ($_FILES) {
        foreach ($_FILES as $file => $array) {
            if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
                return "upload error : " . $_FILES[$file]['error'];
            }
            $attach_id = media_handle_upload( $file, $post_id );
        }   
    }

投稿する画像を挿入したいのですが、おすすめの画像を置き換えるのではなく、set_post_thumbnail()関数は適切ではありません。投稿する画像を手動で挿入すると、次のようなHTMLコードが生成されることがわかりました。

<a href="http://192.168.1.12/wp/wp-content/uploads/2012/09/H530U_08.jpg"><img class="alignnone size-medium wp-image-136" title="HARP_SH530U_0" src="http://192.168.1.12/wp/wp-content/uploads/2012/09/HARP_SH530U_08-300x167.jpg" alt="" width="300" height="167" /></a>

では、投稿する画像を挿入する機能を提供するAPIはどれでしょうか。上記のHTMLコードを生成し、注目の画像を置き換えるのではありません。

ありがとう

3
Charles Yeung

アップロードした画像を投稿のサムネイルとして設定できます。

update_post_meta($post_id,'_thumbnail_id',$attach_id);

例...

if ($_FILES) {
    foreach ($_FILES as $file => $array) {
        if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
            return "upload error : " . $_FILES[$file]['error'];
        }
        $attach_id = media_handle_upload( $file, $post_id );
    }   
}

update_post_meta($post_id,'_thumbnail_id',$attach_id);

あなたが画像の配列をアップロードしているならば、あなたはキーを参照することによってどの画像を指定することを望むかもしれません、

$file[0] //for the first image in the array
$file[1] //for the second image in the array
$file[2] //for the third image in the array
etc...

...しかし、単一の画像をアップロードするときはそれは必要ないはずです。

更新:

あなたのコメントに基づいて、もしあなたがあなたの投稿内容の最初またはそれ以前に画像を挿入したいのであればおそらくthe_content関数をそのようにフィルターにかける、

add_filter( 'the_content', 'insert_img_to_post', 20 );

function insert_img_to_post( $content ) {

    global $post;
    $post_id = $post->ID;

    if ( is_single() )

        $content = sprintf(
            '<img class="post-icon" src="%s" alt="Post icon" title=""/>',
            wp_get_attachment_url(get_post_meta( $post_id, '_thumbnail_id', true )),
            $content
        );

    return $content;
}

...この関数をfunctions.phpファイルに別の関数/フィルタとして追加してください。うまくいきませんので、wp_insert_post関数内に組み込んではいけません。これは、the_contentフィルタにフックして、コンテンツの前の投稿の上部に画像を挿入してから、その下にコンテンツを追加して、単独で実行することを目的としています。

ページのような別のページで実行したい場合は、現在これは単一の投稿ページ(is_single)で実行されています。その後、is_pageまたは必要に応じたその他の条件付きタグに変更します。

5
userabuser