it-swarm.com.de

Benutzerdefinierten Beitragstyp erstellt, ausgewählte Vorlage bleibt jedoch nicht ausgewählt

Ich habe einen neuen Beitragstyp namens "Ressourcen" registriert. Ich gebe "Seitenattribute" als unterstützte Funktion an. Wenn ich einen neuen Ressourcenbeitrag erstelle, wird unter Vorlage angezeigt, dass ich aus einer Reihe von benutzerdefinierten Vorlagen auswählen kann, die ich definiert habe. Nachdem ich dies ausgewählt und auf "Aktualisieren" geklickt habe, wird die Einstellung nicht gespeichert und die Vorlage wird nicht verwendet. Irgendwelche Ideen?

function create_post_type() {
register_post_type( 'foo_resources',
    array(
        'labels' => array(
            'name' => __( 'Resources' ),
            'singular_name' => __( 'Resource' )
        ),
    'public' => true,
    'has_archive' => true,
    'hierarchical' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'menu_position' => 5,   
    'supports' => array('title','editor','author','page-attributes'),
    'rewrite' => array(
        'slug' => 'resources',
        'with_front' => false
    ),      
    )
);

}

1
mrtsherman

Die Seitenvorlage für den benutzerdefinierten Beitragstyp wird nicht gespeichert, da überprüft wird, ob der Beitragstyp "Seite" ist. Sie ist für benutzerdefinierte Beitragstypen noch nicht implementiert. Das Dropdown-Menü für die Seitenvorlagen wurde in 3.1 vollständig entfernt.

So gehe ich damit um:

/* Define the custom box */

// WP 3.0+
add_action('add_meta_boxes', 'custom_template_add_custom_box');

// backwards compatible
//add_action('admin_init', 'custom_templatet_add_custom_box', 1);

/* Do something with the data entered */
add_action('save_post', 'custom_template_save_postdata');

/* Adds a box to the main column on the Post and Page edit screens */
function custom_template_add_custom_box() {
    add_meta_box( 'custom-post-type-template', 'Custom Post Type Template', 'custom_template_inner_box', 'foo_resources', 'side' );
}

/* Prints the box content */
function custom_template_inner_box( $post ) {

    // Use nonce for verification
    wp_nonce_field( plugin_basename(__FILE__), 'custom_template_noncename' );

    if ( 0 != count( get_page_templates() ) ) {
        $page_template = get_post_meta($post->ID, '_wp_page_template', TRUE); ?>
    <p><strong><?php _e('Template') ?></strong></p>
    <label class="screen-reader-text" for="page_template"><?php _e('Page Template') ?></label><select name="page_template" id="page_template">
    <option value='default'><?php _e('Default Template'); ?></option>
    <?php page_template_dropdown($page_template); ?>
    </select>
<?php }
}

/* When the post is saved, saves our custom data */
function custom_template_save_postdata( $post_id ) {

     // verify this came from the our screen and with proper authorization,
     // because save_post can be triggered at other times

     if ( !isset( $_POST['custom_template_noncename'] ) || !wp_verify_nonce( $_POST['custom_template_noncename'], plugin_basename(__FILE__) ) )
         return $post_id;

     // verify if this is an auto save routine. 
     // If it is our form has not been submitted, so we dont want to do anything
     if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
         return $post_id;


     // Check permissions
     if ( 'page' == $_POST['post_type'] ) 
     {
       if ( !current_user_can( 'edit_page', $post_id ) )
           return $post_id;
     }
     else
     {
       if ( !current_user_can( 'edit_post', $post_id ) )
           return $post_id;
     }

     // OK, we're authenticated: we need to find and save the data

     $page_template = $_POST['page_template'];

    if ( !empty($page_template) && 'foo_resources' == get_post_type($post_id) ) {
        $page_templates = get_page_templates();
        if ( 'default' != $page_template && !in_array($page_template, $page_templates) ) {
            if ( $wp_error )
                return new WP_Error('invalid_page_template', __('The page template is invalid.'));
            else
                return 0;
        }
        update_post_meta($post_id, '_wp_page_template',  $page_template);
    }
}

/* Custom template redirection hook */

function custom_template_redirect() {
    global $post;

    if ( is_single() && 'foo_resources' == get_post_type($post) ) {
        $page_template = get_page_template();
        include($page_template);
        exit;
    }
}
add_action("template_redirect", 'custom_template_redirect');

Vielleicht sollten Sie erwägen, Post-Formate als eine andere Option zu verwenden.

4
Ján Bočínec