【问题标题】:WordPress Featured Image | All Post Slugs Matching Image File NameWordPress 特色图片 |所有与图像文件名匹配的 Post Slugs
【发布时间】:2012-02-14 17:37:58
【问题描述】:

我的博客上有一堆旧帖子,我想为其分配特色图片。

我已经检索了我想在每篇文章中使用的所有图片。

我在每个帖子的 slug 之后保存了每个图像文件名。

我想检索所有帖子,从每个帖子中获取 slug 名称,搜索上传图像文件的指定目录,当帖子 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 生成 post slug。 (我不使用 WP 默认 slug。)

有用的链接:

  1. http://codex.wordpress.org/Template_Tags/get_posts
  2. http://codex.wordpress.org/Function_Reference/wp_update_post
  3. http://codex.wordpress.org/Post_Thumbnails
  4. http://codex.wordpress.org/Function_Reference/wp_upload_dir
  5. http://codex.wordpress.org/Function_Reference/wp_insert_attachment

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    自己编写了一个脚本,以及一篇博文。对改进的贡献表示赞赏。答案参考此链接Set WordPress Featured Image For All Post Slugs Matching Image File Name in Specified Directory

    <?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;
        }
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      你救了我的命,你的代码只需要一些调整就可以了。在这里。

      <?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;
          }
      }
      ?>
      

      【讨论】:

        猜你喜欢
        • 2012-12-12
        • 1970-01-01
        • 2019-07-31
        • 2012-10-12
        • 1970-01-01
        • 2015-04-05
        • 2012-09-03
        • 2015-04-28
        • 1970-01-01
        相关资源
        最近更新 更多