如何更改主元数据库中的默认产品类型

时间:2014-12-26 12:21:20

标签: wordpress woocommerce

我需要将主要WooCommerce元数据库中的默认产品类型从“简单产品”更改为“简单订阅”,有没有人知道如何实现这一目标?

尝试使用我在源代码中找到的过滤器,但我最接近的是添加了一个自定义产品类型,这显然不是后来的。

感谢。

3 个答案:

答案 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' );

    }

});