Woocommerce定制可下载产品类型

时间:2016-05-09 11:42:24

标签: php jquery wordpress woocommerce

我创建了一个自定义WC产品类型,其定义如下:

class WC_Product_My_Product extends WC_Product_Simple {

 public function __construct( $product ) {

    $this->product_type = 'my_product';

    $this->virtual = 'yes';
    $this->downloadable = 'yes';
    $this->manage_stock = 'no';
 }
}

正如您所看到的,该产品是一种虚拟产品,包含可下载文件。 我正在使用Jquery来定义选择产品时要显示的设置。 我还会显示通常为选择虚拟和可下载的简单产品显示的字段。

 /*
 * Apply same settings as virtual / downloadable files
*/
jQuery( '.options_group.show_if_downloadable' ).addClass( 'show_if_my_product' );
jQuery( '.hide_if_virtual' ).addClass( 'hide_if_my_product' );

 jQuery( 'body' ).on( 'woocommerce-product-type-change', function( event, select_val, select ) {

    if ( select_val == 'my_product' ) {
      jQuery( '.show_if_my_product' ).show();
      jQuery( '.hide_if_my_product' ).hide();
    } else {
      jQuery( '.show_if_my_product' ).show();
      jQuery( '.hide_if_my_product' ).hide();
   }

现在,问题是从下拉列表中选择“我的产品”时未选中“虚拟”和“可下载”复选框,因为默认情况下它们不是简单产品。由于woo商业只是使用JQuery来显示/隐藏不同产品类型的不同字段(但字段仍然存在),当添加新产品时,Wordpress将其值存储在posts meta中。因此,除非我记得在从默认的简单产品切换到我的产品之前首先检查虚拟和可下载,否则我的下载设置和链接将不会被存储。

现在,解决方案相当简单(并且正在运行)。手动(错误...使用jQuery)检查“虚拟”和“可下载”复选框。像这样:

jQuery( '#_virtual' ).attr( 'checked' , true );
jQuery( '#_downloadable' ).attr( 'checked' , true );

现在,正如我所说,这是有效的,所以没有什么可以“修复”。但是,我对此解决方案并不满意,因为它看起来像是一种解决方法。 我的理解(也许是错误的?)My Product类已经将它们定义为虚拟和可下载的,并且它们不应该遵循只有其他产品存在的隐藏输入字段。 也许在我定义产品的PHP中缺少一些东西?或许我完全误解了WC_Product子类的“虚拟”和“可下载”属性是什么意思?

如果这是一个合适的解决方案,那么我应该简单地将定义删除为虚拟的并可在php类中下载吗?

最后,这个解决方案有效,我看不出任何重大问题,但它似乎仍然缺少,不应该这样做。我只是偏执狂吗?

1 个答案:

答案 0 :(得分:2)

我找到解决方案来解决这个问题。你只需要添加这段代码

mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(26.89454, 75.82607), 15.0f));