WordPress'te bir URL'den Öne Çıkan Resim Nasıl Eklenir?


Bazen bir gönderiye öne çıkan bir görseli veya WordPress kurulumunuzun çalıştığı sunucudan başka bir sunucudaki özel bir gönderi türüne dinamik olarak eklemeniz gerekir. Ve ortak bir sorunla karşı karşıyasınız: bunu nasıl yapmalı?

Tabii bu durumda öne çıkan görseli ikinci sunucudan alıp kendi sunucunuza, yükleme klasörüne indirmeniz ve doğru gönderiye atamanız gerekiyor. İlk adımda dinamik olarak yeni bir gönderi oluşturacağız, ardından öne çıkan görselle ilgileneceğiz.

1. Adım: Dinamik Olarak Gönderi Oluşturun

Dinamik olarak bir yayın oluşturmak için wp_insert_post() işlevini kullanmanız gerekir. Aşağıdaki kodu bir “IF” ifadesinin içine yerleştirebilirsiniz, aksi takdirde her sayfa yüklendiğinde yeni bir gönderi oluşturulacaktır. O kadar kullanışlı değil.

// 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 );

Bu kodu çalıştırmak yalnızca yeni bir gönderi oluşturacaktır. Şimdi öne çıkan görseli ekleme zamanı.

2. Adım: Öne Çıkan Resmi Ekleyin

Öne çıkan görseli bir URL'den eklemek için bazı WordPress işlevlerini kullanmamız gerekir:

  • wp_upload_dir() : yükleyici klasör yolunu almak için
  • wp_mkdir_p() : klasör oluşturmak ve izinleri ayarlamak için
  • wp_check_filetype() : ek biçimini kontrol etmek için
  • sanitize_file_name() : ek dosya adını biçimlendirmek için
  • wp_insert_attachment() : ek oluşturmak için
  • wp_generate_attachment_metadata() : ek meta verileri oluşturmak için
  • wp_update_attachment_metadata() : ek meta verilerini güncellemek için
  • set_post_thumbnail() : eki gönderide öne çıkan görsel olarak atamak için

Ve şimdi kod burada. Bu komut dosyası çalışırken tam olarak ne olduğunu görebilmeniz için her eyleme yorum yaptım.

// 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 );

Bu kodun ilginç yanı onu bir döngüye yerleştirebilmenizdir. Örneğin gönderileri bir CSV dosyasından veya bir XML dosyasından içe aktarmak için. Bu gerçekten güçlü ve gerçekten kullanışlıdır, ancak bir şeyi unutmayın: Bu komut dosyasını asla function.php dosyanızda koşullu bir etiket yerleştirmeden kullanmayın, aksi takdirde birkaç dakika içinde yüzlerce yeni gönderi oluşturulur!

Bu pasajı faydalı buldunuz mu? Lütfen bir yorum bırakın ve bu parçadan ne yarattığınızı bize bildirin!