ウェブサイト検索

WordPress で URL からアイキャッチ画像を追加する方法


WordPress インストールが実行されているサーバーとは別のサーバーから、投稿またはカスタム投稿タイプにアイキャッチ画像を動的に追加する必要がある場合があります。そして、あなたは共通の問題に直面しています: それをどうやって行うか?

もちろん、この場合は、2 番目のサーバーからアイキャッチ画像を取得し、それを自分のサーバーのアップロード フォルダーにダウンロードして、正しい投稿に割り当てる必要があります。最初のステップでは、新しい投稿を動的に作成してから、注目の画像を処理します。

ステップ 1: 投稿を動的に作成する

投稿を動的に作成するには、wp_insert_post() 関数を使用する必要があります。以下のコードを「IF」ステートメントに配置できます。そうしないと、ページが読み込まれるたびに新しい投稿が作成されます。そんなに便利ではありません。

// Register Post Data
$post = array();
$post['post_status']   = 'publish';
$post['post_type']     = 'post'; // can be a CPT too
$post['post_title']    = 'My New Post';
$post['post_content']  = 'My new post content';
$post['post_author']   = 1;

// Create Post
$post_id = wp_insert_post( $post );

このコードを実行すると、単純に新しい投稿が作成されます。次に、注目の画像を追加します。

ステップ 2: 注目の画像を追加する

URL からアイキャッチ画像を追加するには、いくつかの WordPress 機能を使用する必要があります。

  • wp_upload_dir() : アップローダーフォルダーのパスを取得します。
  • wp_mkdir_p() : フォルダーを作成し、アクセス許可を設定します
  • wp_check_filetype() : 添付ファイルの形式をチェックします
  • sanitize_file_name() : 添付ファイル名をフォーマットします
  • wp_insert_attachment() : 添付ファイルを作成します
  • wp_generate_attachment_metadata() : 添付ファイルのメタデータを生成します
  • wp_update_attachment_metadata() : 添付ファイルのメタデータを更新します
  • set_post_thumbnail() : 添付ファイルを投稿のアイキャッチ画像として割り当てます

そして、これがコードです。このスクリプトの実行中に何が起こっているかを正確に確認できるように、各アクションにコメントを付けました。

// Add Featured Image to Post
$image_url        = 'http://s.wordpress.org/style/images/wp-header-logo.png'; // Define the image URL here
$image_name       = 'wp-header-logo.png';
$upload_dir       = wp_upload_dir(); // Set upload folder
$image_data       = file_get_contents($image_url); // Get image data
$unique_file_name = wp_unique_filename( $upload_dir['path'], $image_name ); // Generate unique name
$filename         = basename( $unique_file_name ); // Create image file name

// Check folder permission and define file location
if( wp_mkdir_p( $upload_dir['path'] ) ) {
    $file = $upload_dir['path'] . '/' . $filename;
} else {
    $file = $upload_dir['basedir'] . '/' . $filename;
}

// Create the image  file on the server
file_put_contents( $file, $image_data );

// Check image file type
$wp_filetype = wp_check_filetype( $filename, null );

// Set attachment data
$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title'     => sanitize_file_name( $filename ),
    'post_content'   => '',
    'post_status'    => 'inherit'
);

// Create the attachment
$attach_id = wp_insert_attachment( $attachment, $file, $post_id );

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

// Define attachment metadata
$attach_data = wp_generate_attachment_metadata( $attach_id, $file );

// Assign metadata to attachment
wp_update_attachment_metadata( $attach_id, $attach_data );

// And finally assign featured image to post
set_post_thumbnail( $post_id, $attach_id );

このコードの興味深い点は、ループ内に配置できることです。たとえば、CSV ファイルまたは XML ファイルから投稿をインポートします。これは非常に強力で非常に便利ですが、1 つだけ忘れないでください。コンディショナル タグを配置せずに、functions.php ファイルでこのスクリプトを絶対に使用しないでください。そうしないと、数分で何百もの新しい投稿が作成されてしまいます。

このスニペットは役に立ちましたか?コメントを残して、このスニペットから何を作成したか教えてください。