如何使用脚本添加产品图片?

时间:2014-03-28 作者:Tasawer Khan

我在woocommerce上有几百种没有图片的产品。我计划将来上传图片。图像与产品(+.jpg)的SKU具有相同的名称。

我有没有办法编写一个脚本,将此图像添加为产品图像和SKU的特征图像=此图像的名称(-.jpg)?

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

如果您的图像命名为really 与产品SKU匹配并使用media uploader上载文件,您可以使用a single function 钩住add_attachment 你就完了。

一旦需要一些工作,我会避免在一个“会话”中上传所有数百张图片,也许你每次可以上传25/50张图片,而不会出现任何问题。。。

有关代码作用的更多信息,请参见注释:

add_action(\'add_attachment\', function( $attachmentID ) {
  if ( ! class_exists( \'WC_Product\' ) ) return; // if no WooCommerce do nothing

  // an attachment was jus saved, first of all get the file name
  $src = wp_get_attachment_image_src( $attachmentID, \'full\' );
  $filename = pathinfo( $src[0], PATHINFO_FILENAME );

  // now let\'s see if exits a product with the sku that match filename
  $args = array(
    \'meta_key\' => \'_sku\',
    \'meta_value\' => $filename,
    \'post_type\' => \'product\',
    \'posts_per_page\' => \'1\' // assuming sku is unique get only one post
  );
  $prods = get_posts( $args );
  if ( ! empty($prods) ) {

    // ok we have a match, exists a product having sku that match filename
    $product = array_pop( $prods );

    // set the thumbnail for the product
    set_post_thumbnail( $product, $attachmentID );

    // now "attach" the post to the product setting \'post_parent\'
    $attachment = get_post( $attachmentID );
    $attachment->post_parent = $product->ID;
    wp_update_post( $attachment );
  }
});

SO网友:codearachnid

根据您对问题的评论,您可以查看http://www.wpallimport.com 他们有一个woocommerce插件,它运行得很好,包括产品图像导入器。使用自定义CSV,我相信您可以将其整合为一次导入所有内容(包括媒体管理器位)。

现在,如果您希望通过脚本附加现有上载的媒体项目,那么它应该非常简单,只需查询未附加的图像,检查其图像名称(除非您正在自定义),然后在上执行元查询sku查找post_type = \'product\' 然后运行update_post_meta($post_id, \'_thumbnail_id\', $attachment_id); 使用提供的信息位。根据您希望通过+托管环境解析的图像数量,这可能需要很长时间或在执行期间耗尽资源/时间。因此,我建议添加分页组件,将您的执行过程/时间缩减到环境的可管理块中。

结束

相关推荐

Plugins_url函数混合了系统路径和URL

在我的WordPress小部件中,我使用以下代码:wp_register_script(\'jquery-ui.widget\', plugins_url(\'assets/js/jquery-ui-1.9.2.widget.js\', dirname( __FILE__ ))); 不幸的是,代码给了我一个无效的URL,它与我的系统路径混合在一起:http://test.dev/wp-content/plugins/C:/projects/wordpress/plugins/assets/js/