私はCPTに取り組んでいますが、投稿/編集ページのレイアウト(post-new.phpとpost.php)をもっと制御する必要があります。 admin_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');
標準の投稿編集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
}
他のオプションはあなたがあなたの標準編集画面に必要なもの カスタムメタボックス を追加することでしょう。