web-dev-qa-db-fra.com

get_post_type () dans in_array ne fonctionne pas pour une raison quelconque

J'essaie de créer une fonction pour les métaboxes et une raison pour laquelle je ne parviens pas à obtenir get_post_type dans in_array.

Tout le reste semble fonctionner dans les tests, mais in_array Nope.

Ceci est la fonction que j'ai

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

Donc, pour chacune de ces clés dans un tableau, je veux vérifier la valeur screen et si c'est dans ce tableau pour afficher metabox.

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

Et c’est à ce moment-là qu’il échoue et qu’en principe, n’affiche pas de metabox, car il n’existe pas dans le tableau.

Quand j'essaie d'imprimer $value['screen'] je reçois un tableau

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

Quand j'essaie d'imprimer $post_type sur une nouvelle page, j'obtiens un page mais il échoue toujours in_array

Lorsque j'essaie de définir manuellement un tableau à la place $value['screen'] comme:

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

Il échoue à nouveau.

Et quand j'essaie de définir manuellement le type de message dans in_array, cela fonctionne comme:

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

Il charge metabox dans ce tableau $value.

La seule chose qui vient à ma min est que mon crochet de fonction est activé avant get_post_type () afin qu'il ne récupère pas la valeur du type de publication.

Pour la classe que j'ai utilisée et exemple de la page de codex WordPress https://codex.wordpress.org/Function_Reference/add_meta_box#Class

Des idées ou des suggestions sur la façon de le faire fonctionner?

1

Vous devez utiliser add_meta_boxes pour ajouter des métaboxes.

Ce hook ne déclenche que la page appropriée et transmet également en tant qu'argumument le type de publication en cours. Vous pouvez donc l'utiliser pour le récupérer à l'aide de get_post_type().

Exemple de code:

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

Notez que j'ai ajouté une vérification pour isset( $value['screen'] ) car vous devriez toujours vérifier qu'une variable est définie avant de l'utiliser.

2
gmazzap