Wie man Metabox NUR zu einem bestimmten WooCommerce-Produkttyp hinzufügt

Ein bisschen mehr Info:

Ich habe einen benutzerdefinierten Produkttyp in WooCommerce erstellt. Die function add_meta_box akzeptiert nur ein Argument ‘post_type’. Dies bedeutet, dass ich es auf allen Produkten problemlos bekommen kann, aber ich möchte es nur auf eine Teilmenge des “Produkts” post_type basierend auf “product_type” rendern.

Dies ist der Code, den ich gerade in meiner Metabox-class verwende:

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' ); } } 

Ich habe versucht, get_post () innerhalb der function zu verwenden, um den Produkttyp der aktuellen Seite zu überprüfen, funktioniert nicht, darf die Seite nicht vor dem Meta-Feld laden. Ich habe versucht, die $ post-Variable zu verwenden, die mit diesem Hook übergeben werden kann, als ich versuchte, $ post-> product_type Ich bekam einen Nicht-Objekt-Fehler, also glaube ich nicht zu verstehen, was dieser Parameter in diesem Hook ist.

Jeder Rat würde geschätzt werden, ich versuche, so viel WordPress Best Practice zu übernehmen, wie ich kann und seine Architektur wirklich zu verstehen, so fühlen Sie sich frei zu erklären.

Solutions Collecting From Web of "Wie man Metabox NUR zu einem bestimmten WooCommerce-Produkttyp hinzufügt"

Sie sollten in der Lage sein, die aktuelle Produkt-ID zu erhalten, indem Sie die globale Variable $post und diese mit der WooCommerce-function get_product() für das Produktobjekt verwenden und dessen Produkttyp testen.

 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' ); } }