Le code suivant dans functions.php génère un message lorsque je publie, pas une page:
// custom post_type for agenda
add_action( 'init', 'create_my_post_types' );
function create_my_post_types() {
register_post_type( 'agenda', array(
'labels' => array(
'name_admin_bar' => _x( 'Agenda', 'add new on admin bar' ),
),
'public' => true,
'publicly_queryable' => false,
'capability_type' => 'page',
'map_meta_cap' => true,
'hierarchical' => true,
'rewrite' => false,
'query_var' => false,
'delete_with_user' => true,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'page-attributes', 'custom-fields', 'comments', 'revisions' ),
) );}
Qu'est-ce que je fais mal?
J'ai besoin d'ajouter un metabox à une page, mais uniquement à la page "agenda", je ne veux pas que ce metabox apparaisse dans toutes les pages du panneau d'administration. Je crée donc un post_type personnalisé avec exactement les mêmes fonctions qu'une page. , seulement avec un post_type différent pour pouvoir définir un metabox à lui seul.
http://i.stack.imgur.com/oPEx8.png (ne peut pas encore publier d'images directes, alors cliquez sur le lien)
Votre capture d'écran semble indiquer que le message d'état de votre message personnalisé vous intéresse et que vous indiquez 'Page updated. View page'
. Si cela est vrai, la raison pour laquelle vous obtenez 'Post updated. View post'
est que vous n'avez pas fourni de messages d'état pour votre type de publication personnalisé.
Voici le code de la page d'édition de l'administrateur (edit-form-advanced.php
):
if ( isset($_GET['message']) ) {
$_GET['message'] = absint( $_GET['message'] );
if ( isset($messages[$post_type][$_GET['message']]) )
$message = $messages[$post_type][$_GET['message']];
elseif ( !isset($messages[$post_type]) && isset($messages['post'][$_GET['message']]) )
$message = $messages['post'][$_GET['message']];
}
L’écran d’édition tente donc de récupérer les messages de votre $post_type
(agenda), sans les trouver, et d’afficher les messages de publication.
Vous pouvez résoudre ce problème en créant $messages['agenda']
avec quelque chose comme l’approche décrite dans la référence de fonction Enregistrer le type de publication :
function agenda_update_messages( $messages ) {
global $post, $post_ID;
$messages['agenda'] = array(
// ...
1 => sprintf( __('Page updated. <a href="%s">View page</a>', 'your_text_domain'),
esc_url( get_permalink($post_ID) ) ),
// ...
);
return $messages;
}
add_filter( 'post_updated_messages', 'agenda_update_messages' );
Vous n'avez pas besoin de créer un type d'article personnalisé, ajoutez simplement la metabox si la page est celle dont vous avez besoin. Ex:
add_action('admin_init','meta_on_agenda_only');
function meta_on_agenda_only(){
$post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'] ;
// checks for post/page ID change the 00 to the ID pf your agenda page
if ($post_id == '00' || is_page('agenda')) {
//add your metabox
add_meta_box('meta_box_id', 'Meta Box name', 'callback_function', 'page', 'normal', 'high');
}
//hook the save action
add_action('save_post','my_meta_save');
}