У меня есть куча старых сообщений в блоге, которые я бы хотел назначить.
Я получил все изображения, которые я хотел бы использовать для каждого сообщения.
Я сохранил каждое имя файла изображения после пули каждого сообщения.
Я хотел бы получить все сообщения, захватить имя slug из каждого сообщения, выполнить поиск по указанному каталогу, в который загружаются файлы изображений, когда post slug совпадает с именем файла изображения, установить это изображение в качестве отображаемого изображения для этого сообщения и перебирать все сообщения.
Я не уверен, как это сделать, но я предоставил некоторый пример кода, который я нашел, а также несколько полезных (надеюсь) ссылок.
Следующий код используется для извлечения всех сообщений и обновления определенного сообщения:
$allPosts = get_posts(array('numberposts' => -1, 'post_type' => 'post')); foreach($allPosts as $thePost){ $my_post = array(); $my_post['post_type'] = $thePost->post_type; $my_post['ID'] = $thePost->ID; $my_post['post_name'] = autoSlug($thePost->post_title); wp_update_post($my_post); }
Примечание. У меня есть специальная функция для создания столбцов сообщений, основанных на post_title. (Я не использую пул по умолчанию WP.)
Полезные ссылки:
Написал сам сценарий вместе с записью в блоге. Взносы за улучшения оцениваются. См. Эту ссылку для ответа. Установите WordPress. Лучшее изображение для всех сообщений. Совпадение имени файла изображения в указанном каталоге :
<?php // Get All Posts. $allPosts = get_posts(array('numberposts' => -1, 'post_type' => 'post')); // Specify where the images are located. $themePATH = get_theme_root().'/'.get_template().'/thumbs/'; // The uploads directory for your blog. $uploads= wp_upload_dir(); // List of images including extensions. $images = listImages($themePATH,true); // List of images without extensions. $imageNames = listImages($themePATH,false); function reverseSlug($string){ $string = str_replace("-", " ", $string);// Convert hyphen to space $string = ucwords($string);// Capitalize the beginning of each word return $string; } // Retrieve all images from the specified directory. // Output array with and without file extensions. function listImages($dirname=".",$display) { $ext = array("jpg", "png", "jpeg", "gif"); $files = array(); if($handle = opendir($dirname)){ while(false !== ($file = readdir($handle))){ for($i=0;$i<sizeof($ext);$i++){ if(strstr($file, ".".$ext[$i])){ $files[] = $file; } } } closedir($handle); } sort($files); foreach($files as $theFile){ $info = pathinfo($theFile); $fileName = basename($theFile,'.'.$info['extension']); $files1[] = $fileName; } if($display == false){ return ($files1); } if($display == true){ return($files); } } for($i = 0; $i < count($allPosts); $i++){ // Check if post slugs match image slugs. $check[$i] = in_array($allPosts[$i]->post_name, $imageNames); if($check[$i] == 1){ echo 'Yes, post title matches image name.<br />'.PHP_EOL; // Search through the image slugs for a direct match with the post slug. $search[$i] = array_search($allPosts[$i]->post_name, $imageNames); $filename = $images[$search[$i]]; $newfile = $uploads['path'].'/'.$filename; // Copy the image from theme folder to uploads directory. copy($themePATH.$filename, $newfile); // Delete image from theme folder. unlink($themePATH.$filename); // Retrieve the file type from the file name. $wp_filetype = wp_check_filetype(basename($filename), null); // Construct the attachment array. $attachment = array( 'post_mime_type' => $wp_filetype['type'], 'guid' => $uploads['url'].'/'.$filename, 'post_title' => preg_replace('/\.[^.]+$/', '', reverseSlug(basename($filename))), 'post_content' => '', 'post_status' => 'inherit' ); // This function inserts an attachment into the media library. $attach_id = wp_insert_attachment($attachment, $newfile, $allPosts[$i]->ID); // You must first include the image.php file // For the function wp_generate_attachment_metadata() to work. require_once(ABSPATH . 'wp-admin/includes/image.php'); // This function generates metadata for an image attachment. // It also creates a thumbnail and other intermediate sizes // of the image attachment based on the sizes defined on // the Settings_Media_Screen. $attach_data = wp_generate_attachment_metadata($attach_id, $newfile); if(!is_wp_error($attach_id)){ // Update metadata for an attachment. wp_update_attachment_metadata($attach_id, $attach_data); // Updates the value of an existing meta key (custom field) for the specified post. update_post_meta($allPosts[$i]->ID, '_thumbnail_id', $attach_id); } } else{ echo 'No matches found.<br />'.PHP_EOL; } } ?>
вы сохраняете мою жизнь, ваш код просто нуждается в некоторых настройках и работает как шарм. вот.
<?php // Get All Posts. $allPosts = get_posts(array('numberposts' => -1, 'post_type' => 'wpdmpro')); // Specify where the images are located. $themePATH = get_theme_root().'/'.get_stylesheet().'/thumbs/'; // The uploads directory for your blog. $uploads= wp_upload_dir(); // List of images including extensions. $images = listImages($themePATH,true); // List of images without extensions. $imageNames = listImages($themePATH,false); function reverseSlug($string){ $string = str_replace("-", " ", $string);// Convert hyphen to space $string = ucwords($string);// Capitalize the beginning of each word return $string; } // Retrieve all images from the specified directory. // Output array with and without file extensions. function listImages($dirname=".",$display) { $ext = array("jpg", "png", "jpeg", "gif"); $files = array(); if($handle = opendir($dirname)){ while(false !== ($file = readdir($handle))){ for($i=0;$i<sizeof($ext);$i++){ if(strstr($file, ".".$ext[$i])){ $files[] = $file; } } } closedir($handle); } sort($files); foreach($files as $theFile){ $info = pathinfo($theFile); $fileName = basename($theFile,'.'.$info['extension']); $files1[] = $fileName; } if($display == false){ return ($files1); } if($display == true){ return($files); } } for($i = 0; $i < count($allPosts); $i++){ // Check if post slugs match image slugs. if (is_array($imageNames)) { $check[$i] = in_array($allPosts[$i]->post_name, $imageNames); } else { echo 'error'; }; if($check[$i] == 1){ echo 'Yes, post title matches image name.<br />'.PHP_EOL; // Search through the image slugs for a direct match with the post slug. $search[$i] = array_search($allPosts[$i]->post_name, $imageNames); $filename = $images[$search[$i]]; $newfile = $uploads['path'].'/'.$filename; // Copy the image from theme folder to uploads directory. copy($themePATH.$filename, $newfile); // Delete image from theme folder. unlink($themePATH.$filename); // Retrieve the file type from the file name. $wp_filetype = wp_check_filetype(basename($filename), null); // Construct the attachment array. $attachment = array( 'post_mime_type' => $wp_filetype['type'], 'guid' => $uploads['url'].'/'.$filename, 'post_title' => preg_replace('/\.[^.]+$/', '', reverseSlug(basename($filename))), 'post_content' => '', 'post_status' => 'inherit' ); // This function inserts an attachment into the media library. $attach_id = wp_insert_attachment($attachment, $newfile, $allPosts[$i]->ID); // You must first include the image.php file // For the function wp_generate_attachment_metadata() to work. require_once(ABSPATH . 'wp-admin/includes/image.php'); // This function generates metadata for an image attachment. // It also creates a thumbnail and other intermediate sizes // of the image attachment based on the sizes defined on // the Settings_Media_Screen. $attach_data = wp_generate_attachment_metadata($attach_id, $newfile); if(!is_wp_error($attach_id)){ // Update metadata for an attachment. wp_update_attachment_metadata($attach_id, $attach_data); // Updates the value of an existing meta key (custom field) for the specified post. update_post_meta($allPosts[$i]->ID, '_thumbnail_id', $attach_id); } } else{ echo 'No matches found.<br />'.PHP_EOL; } } ?>