如何将Metabox仅添加到特定的WooCommerce产品类型

时间:2014-10-06 作者:Coltarain

一些额外信息:

我在WooCommerce中创建了一个自定义产品类型。add\\u meta\\u box函数只接受“post\\u type”参数。这意味着我可以在所有产品上获得它,没有问题,但我只想在基于“product\\u type”的“product”post\\u类型的子集上渲染它。

这是我在metabox类中使用的代码:

public function __construct() {
    add_action( \'add_meta_boxes\', array( $this, \'add_meta_box\' ) );
}

public function add_meta_box( $post_type ) {
    $post_types = array(\'product\');     //limit meta box to certain post types
    if ( in_array( $post_type, $post_types )) {
        add_meta_box(
            \'wf_child_letters\'
            ,__( \'Picture Preview\', \'woocommerce\' )
            ,array( $this, \'render_meta_box_content\' )
            ,$post_type
            ,\'advanced\'
            ,\'high\'
        );
    }
}
我已经尝试在函数中使用get\\u post()检查当前页面的产品类型,不起作用,不能在元框之前加载页面。我曾尝试使用可以通过此挂钩传递的$post变量,当我尝试$post->product\\u type时,我得到了一个非对象错误,所以我不知道挂钩中的参数是什么。

如果您有任何建议,我将不胜感激。我正在尽可能多地采用Wordpress最佳实践,并真正理解其架构,所以请随意过度解释。

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

您应该能够使用$post 全局变量,并将其与WooCommerce函数一起使用get_product() 到产品对象并测试其产品类型。

public function __construct() {
    add_action( \'add_meta_boxes\', array( $this, \'add_meta_box\' ) );
}

public function add_meta_box( $post_type ) {
    $post_types = array(\'product\');     //limit meta box to certain post types
    global $post;
    $product = get_product( $post->ID );
    if ( in_array( $post_type, $post_types ) && ($product->product_type == \'simple\' ) ) {
        add_meta_box(
            \'wf_child_letters\'
            ,__( \'Picture Preview\', \'woocommerce\' )
            ,array( $this, \'render_meta_box_content\' )
            ,$post_type
            ,\'advanced\'
            ,\'high\'
        );
    }
}

结束

相关推荐

动态复制自定义帖子类型中的自定义Metabox

我正在Wordpress中构建一个自定义帖子类型,用于在客户博客上编写和显示BuzzFeed风格的测验。在自定义帖子类型中,有一个自定义元框,表示每个问题和选择,另一个表示潜在的最终结果。因此,第一个元框由一个数字输入类型(用于分配ID)、一个文本字段(用于输入问题)和另一个字段(用于输入图像)组成。对作者来说,这是他们测验中的第一个问题。如果他们要输入多个问题,则需要选择按钮以添加另一组字段。我不确定如何生成该字段并确保保存任何添加的字段。我不想求助于插件或插件库,因为学习如何做和解决它一样重要。