一些额外信息:
我在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最佳实践,并真正理解其架构,所以请随意过度解释。
最合适的回答,由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\'
);
}
}