get_post_type () in in_array funktioniert aus irgendeinem Grund nicht

Ich versuche, eine function für Metaboxen zu erstellen, und aus irgendeinem Grund kann ich get_post_type nicht in in_array .

Alles andere scheint beim Testen zu funktionieren, aber in_array nope.

Das ist die function, die ich habe

 $metabox = array( 'metabox_one' => array( 'title' => 'First', 'screen' => array( 'post' ) ), 'metabox_two' => array( 'title' => 'Second', 'screen' => array( 'post', 'page') ) ); 

Für jeden dieser Schlüssel im Array möchte ich den screen überprüfen und ob er in diesem Array ist, um Metabox anzuzeigen.

  function call_vivid_framework_metaboxClass() { $post_type = get_post_type(); if( isset($metabox) ) { foreach ( $metabox as $key => $value ) { if ( in_array( $post_type, $value['screen'] )) { new vivid_framework_metaboxClass( $key, $value ); } } } } add_action( 'load-post.php', 'call_vivid_framework_metaboxClass' ); add_action( 'load-post-new.php', 'call_vivid_framework_metaboxClass' ); 

Und das ist, wenn es fehlschlägt und im Grunde keine Metabox anzeigen, da es nicht im Array existiert.

Wenn ich versuche, $value['screen'] zu drucken, bekomme ich ein Array

 [0] => post, [1] => page 

Wenn ich versuche, $post_type auf einer neuen Seite zu drucken, $post_type ich eine page aber es schlägt in_array noch in_array fehl

Wenn ich versuche, ein Array stattdessen $value['screen'] wie folgt manuell zu setzen:

 $screen = array( 'post', 'page'); 

Es schlägt wieder fehl.

Und wenn ich versuche, post in in_array manuell zu setzen, als es funktioniert:

  in_array('page', $value['screen']) 

Es lädt Metabox innerhalb dieses $value Arrays.

Die einzige Sache, die zu meinem min kommt, ist, dass mein functionshook vor get_post_type () ausgetriggers wird, so dass es den Wert des Posttyps nicht erfasst.

Für die class habe ich verwendet und Beispiel von WordPress Codex-Seite https://codex.wordpress.org/Function_Reference/add_meta_box#Class

Irgendwelche Ideen oder Vorschläge, wie man es zur Arbeit bringt?

Solutions Collecting From Web of "get_post_type () in in_array funktioniert aus irgendeinem Grund nicht"

Sie sollten add_meta_boxes , um Metaboxen hinzuzufügen.

Dieser Hook triggers nur die entsprechende Seite aus und übergibt auch den aktuellen Post-Typ als Argument, sodass Sie ihn stattdessen mit get_post_type() .

Beispielcode:

 function call_vivid_framework_metaboxClass( $post_type ) { // if the metabox var is set outside the function, you should // declare it as global global $metabox; if( ! isset( $metabox ) || ! is_array( $metabox ) ) { return; } foreach ( $metabox as $key => $value ) { if ( isset( $value['screen'] ) && in_array( $post_type, $value['screen'], true ) ) { new vivid_framework_metaboxClass( $key, $value ); } } } add_action( 'add_meta_boxes', 'call_vivid_framework_metaboxClass' ); 

Beachten Sie, dass ich eine Überprüfung für isset( $value['screen'] ) hinzugefügt habe, da Sie immer überprüfen sollten, ob eine Variable zuvor definiert wurde, um sie zu verwenden.