Às vezes, você precisa adicionar dinamicamente uma imagem em destaque a uma postagem ou um tipo de postagem personalizada de outro servidor que não o que a instalação do WordPress está executando. E você está enfrentando um problema comum: como fazer isso?
Claro, neste caso, você precisa pegar a imagem em destaque do segundo servidor, baixá-la para o seu próprio servidor, na pasta de upload, e atribuí-la à postagem correta. No primeiro passo vamos criar um novo post dinamicamente, e então vamos lidar com a imagem em destaque.
Etapa 1: criar uma postagem dinamicamente
Para criar um post dinamicamente, você precisa usar a função wp_insert_post() . Você pode colocar o código abaixo em uma declaração “IF”, caso contrário, cada vez que uma página for carregada, ela criará um novo post. Não tão útil.
// 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 );
A execução deste código simplesmente criará uma nova postagem. Agora é hora de adicionar a imagem em destaque.
Etapa 2: adicione a imagem em destaque
Para adicionar a imagem em destaque de um URL, temos que usar algumas funções do WordPress:
- wp_upload_dir() : para recuperar o caminho da pasta do uploader
- wp_mkdir_p() : para criar pasta e definir permissões
- wp_check_filetype() : para verificar o formato do anexo
- Sanitize_file_name() : para formatar o nome do arquivo anexo
- wp_insert_attachment() : para criar anexo
- wp_generate_attachment_metadata() : para gerar metadados de anexo
- wp_update_attachment_metadata() : para atualizar os metadados do anexo
- set_post_thumbnail() : para atribuir o anexo como imagem em destaque do post
E agora aqui está o código. Comentei cada ação para que você possa ver exatamente o que está acontecendo quando esse script está sendo executado.
// 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 );
O que é interessante neste código é que você pode colocá-lo em um loop. Por exemplo, para importar postagens de um arquivo CSV ou de um arquivo XML. Isso é realmente poderoso e muito útil, mas não se esqueça de uma coisa: nunca use este script em seu arquivo functions.php sem colocar uma tag condicional antes, caso contrário você terá centenas de novos posts criados em questão de minutos!
Você achou este snippet útil? Por favor, deixe um comentário e conte-nos o que você criou a partir deste trech