Custom admin post.php page

时间:2011-11-10 作者:impleri

我正在做一个CPT,但我需要对发布/编辑页面(post-new.php和post.php)的布局有更多的控制。我认为通过admin\\u init进行黑客攻击是最好的选择,但我根本无法让脚本正常工作。帮助

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 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

我建议您不要使用标准的后期编辑UI。注册帖子类型时,会有一个参数显示管理UI。

<?php
register_post_type(
    \'some_type\',
     array(
       // stuff here
       \'show_ui\' => false
     )
);
然后只需创建自己的管理页面,并对该界面执行任何需要执行的操作。下面是一个骨架示例。

<?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
}
另一种选择是添加任何内容custom meta boxes 您需要打开标准编辑屏幕。

结束

相关推荐

阻止admin部分(但仍使用admin-ajax.php)

我正在mo建立一个基于社区的WP站点,并阻止任何禁止管理员使用该站点上的管理部分的人:add_action( \'init\', \'sw_block_users\' ); function sw_block_users() { if ( is_admin() && ! current_user_can( \'administrator\' ) ) { wp_redirect( home_url() ); e