我需要将主要WooCommerce元数据库中的默认产品类型从“简单产品”更改为“简单订阅”,有没有人知道如何实现这一目标?
尝试使用我在源代码中找到的过滤器,但我最接近的是添加了一个自定义产品类型,这显然不是后来的。
感谢。
答案 0 :(得分:2)
您忽略了default_product_type
类的output
方法中的正确过滤器WC_Meta_Box_Product_Data
:
if ( $terms = wp_get_object_terms( $post->ID, 'product_type' ) ) {
$product_type = sanitize_title( current( $terms )->name );
} else {
$product_type = apply_filters( 'default_product_type', 'simple' );
}
要过滤它,您可以执行以下操作:
function so_27657057_default_product_type(){
return "subscription";
}
add_action( 'default_product_type', 'so_27657057_default_product_type' );
您可能希望通过某些条件逻辑检查是否存在特定于订阅的类,但是如果您知道它将始终存在并不是那么重要。
答案 1 :(得分:1)
谢谢大家的宝贵建议。 WooThemes支持还添加了一个我最终使用的解决方案,并且运行良好:
add_filter( 'product_type_selector', 'mw_custom_product_type_change', 20 );
function mw_custom_product_type_change( $product_types ) {
$new_array = array( 'booking' => $product_types['booking'] );
$product_types = $new_array;
return $product_types;
}
@helgatheviking方法看起来也很优雅,所以我也会尝试一下。再次感谢。
答案 2 :(得分:0)
@helgatheviking提到的动作'default_product_type'在Woocommerce中不再可用。
@Luis Martins自己的解决方案仅在您清除其他产品类型时有效。
我试图弄清楚如何使用代码挂钩将新产品的后备产品类型从“简单”更改为其他类型, 但找不到通过PHP的方式。
相反,我通过执行“ admin_enqueue_scripts”动作加入了一些jQuery实现了这一目标:
jQuery(function() {
if ( document.location.href.indexOf( 'post-new.php?post_type=product' ) !== -1 ) {
// If we have a page of an initially created product(an auto draft)
// Force the default product type to 'variable'
$( '#product-type' )
.val( 'subscription' )
.trigger( 'change' );
}
});