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?
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.