Erstellen Sie eine benutzerdefinierte PAGE mit register_post_type

Der folgende Code in functions.php gibt einen Post aus, wenn ich publiziere, nicht eine 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' ), ) );} 

Was mache ich falsch?

Das vollständige Problem:

Ich muss eine Metabox zu einer Seite hinzufügen, aber nur die “Agenda” -Seite, ich möchte nicht, dass diese Metabox auf jeder Seite im Admin-Panel erscheint, also erstelle ich einen benutzerdefinierten post_type mit genau denselben functionen einer Seite , nur mit einem anderen post_type, um eine Metabox allein darauf setzen zu können.

Screenshot der aktuellen Ausgabe:

http://img.daswordpress.com/custom-post-types/oPEx8.png (direkte Bilder können noch nicht hochgeladen werden, klicken Sie bitte auf den Link)

Solutions Collecting From Web of "Erstellen Sie eine benutzerdefinierte PAGE mit register_post_type"

Ihr Screenshot scheint anzuzeigen, dass Sie an der Statusmeldung für Ihren benutzerdefinierten Posttyp interessiert sind und sagen: 'Page updated. View page' 'Page updated. View page' . Wenn das stimmt, der Grund, dass Sie bekommen 'Post updated. View post' 'Post updated. View post' dass Sie keine Statusmeldungen für Ihren benutzerdefinierten Post-Typ angegeben haben.

Hier ist der Code für die Admin-Bearbeitungsseite ( 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']]; } 

Der Bearbeitungsbildschirm versucht also, Nachrichten für Ihren $post_type (Agenda) $post_type , sie nicht zu finden und die Postnachrichten anzuzeigen.

Sie können dies beheben, indem Sie $messages['agenda'] mit einem ähnlichen Ansatz erstellen, der in der Referenzfunktion Beitragstyp eingeben beschrieben ist :

 function agenda_update_messages( $messages ) { global $post, $post_ID; $messages['agenda'] = array( // ... 1 => sprintf( __('Page updated. View page', 'your_text_domain'), esc_url( get_permalink($post_ID) ) ), // ... ); return $messages; } add_filter( 'post_updated_messages', 'agenda_update_messages' ); 

Sie müssen keinen benutzerdefinierten Beitragstyp erstellen, fügen Sie einfach die Metabox hinzu, wenn die Seite die gewünschte ist:

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