it-swarm.com.de

Benutzerdefinierte post.php Seite für Administratoren

Ich arbeite an einem CPT, benötige aber mehr Kontrolle über das Layout der Post/Edit-Seite (post-new.php und post.php). Ich dachte, durch admin_init zu hacken wäre die beste Option, aber ich kann das Skript überhaupt nicht zum Laufen bringen. Hilfe?

function init_shelf_page() {
    if (!current_user_can('edit_shelves') && $_SERVER['PHP_SELF'] == '/wp-admin/post.php') {
        if (isset($_GET['post'])) {
            $postID = intval($_GET['post']);
            $post = get_post($postID);
            if ($post->post_type == 'shelf') {
                $post_type_object = get_post_type_object($post->post_type);
                if (!current_user_can($post_type_object->cap->edit_posts)) {
                    wp_die(__('Cheatin’ uh?'));
                }
                include(dirname(__FILE__) . '/shelf-page.php');
                die;
            }
        }
    }
}
add_action('admin_init', 'init_shelf_page');
1
impleri

Ich schlage vor, dass Sie nicht die Standard-Nachbearbeitungsoberfläche verwenden. Wenn Sie Ihren Beitragstyp registrieren, gibt es ein Argument zum Anzeigen der Admin-Benutzeroberfläche.

<?php
register_post_type(
    'some_type',
     array(
       // stuff here
       'show_ui' => false
     )
);

Dann erstellen Sie einfach Ihre eigene Administrationsseite und tun alles, was Sie für die Benutzeroberfläche benötigen. Hier ist ein Skelettbeispiel.

<?php
add_action( 'admin_init', 'wpse33382_add_page' );
function wpse33382_add_page()
{
    $page = add_menu_page(
        __( 'Some Title' ),
        __( 'Menu Title' ),
        'edit_others_posts',
        'some-slug',
        'wpse33382_page_cb',
    );

    add_action( 'admin_print_scripts-' . $page, 'wpse33382_scripts' );
    add_action( 'admin_print_styles-' . $page, 'wpse33382_styles' );
}

function wpse33382_page_cb()
{
    // code for the page itself here
    ?>
        <form method="post" action="">
            <input type="hidden" name="action" value="do_stuff" />
            <?php wp_nonce_field( 'wpse33382_nonce', '_nonce' ); ?>
        </form>

    <?php
    // catch POST submissions here, then call wp_insert_post
    if( isset( $_POST['action'] ) && 'do_stuff' == $_POST['action'] )
    {
        // verify nonces/referrers here, then save stuff
    }
}

function wpse33382_scripts()
{
    // wp_enqueue_script here
}

function wpse33382_styles()
{
    // wp_enqueue_style here
}

Die andere Option wäre das Hinzufügen von beliebigen benutzerdefinierten Meta-Feldern zu Ihrem Standard-Bearbeitungsbildschirm.

1
chrisguitarguy