私は実際にはカスタムタイプをWPに構築しており、投稿アクセスを特定のユーザーロールに制限できるようにする必要があります。管理領域では、共同編集者は投稿を表示できますが編集できません。読み取り専用として開くだけです。私はいくつかのプラグイン(AdminimizeとUser Role Editor)を使いましたが、私の知る限りではそれらは私のニーズには当てはまりません。
これを解決するために私に指示を与える人はいますか?
送信メタボックスを削除するというbrasolfiloの提案は、私が完全な解決策を検討する際の一部にすぎません。私はほんの数分で、FireBugまたは他のいくつかのツールのいずれかを使用して、そのページに「送信」ボタンをハッキングすることができます。
私は...するだろう...
post-new.php
へのアクセスをすべて削除します。次のコードは コーデックスで見つけることができる 'Book'投稿タイプ を使用します。 CPTに合わせて修正できます。
post-new.php
へのアクセスを削除function conditional_redirect_post_new_wpse_94776() {
global $_REQUEST,$pagenow;
if (!empty($_REQUEST['post_type'])
&& 'book' == $_REQUEST['post_type']
&& !empty($pagenow)
&& 'post-new.php' == $pagenow
&& !current_user_can('administrator'))
{
wp_safe_redirect(admin_url('edit.php?post_type=book'));
}
}
add_filter('admin_menu','conditional_redirect_post_new_wpse_94776');
function remove_add_new_menu_wpse_94776() {
if (!current_user_can('administrator')) {
remove_submenu_page('edit.php?post_type=book','post-new.php?post_type=book');
}
}
add_action('admin_menu','remove_add_new_menu_wpse_94776');
function reset_post_new_link_wpse_94776() {
global $post_new_file,$post_type_object;
if (!isset($post_type_object) || 'book' != $post_type_object->name) return false;
if (!current_user_can('administrator')) {
$post_type_object->labels->add_new = 'Return to Index';
$post_new_file = admin_url('edit.php?post_type=book');
}
}
add_action('admin_head','reset_post_new_link_wpse_94776');
function stop_submit_wpse_94776() {
if (!empty($_POST) && $_POST['post_type'] == 'book' && !current_user_can('administrator')) {
if (true === DOING_AJAX) {
exit;
}
if (!empty($_POST['post_ID'])) {
wp_safe_redirect(admin_url('post.php?post='.$_POST['post_ID'].'&action=edit'));
exit;
} else {
wp_safe_redirect(admin_url('edit.php?post_type=book'));
exit;
}
}
}
add_action('admin_init','stop_submit_wpse_94776');
私はそれを持っていると思います。テストしているように動作しますが、特に最後のコードブロックにバグがあっても驚くことではありませんし、同じことをするより洗練された方法があっても驚くことではありません。警告Emptor。返金なし。
単にメタボックスを削除しただけでは、投稿を保存/更新することはできません。通常のPost投稿タイプでここでテストしました:
add_action( 'do_meta_boxes', 'remove_publish_mbox_wpse_94776', 10, 3 );
function remove_publish_mbox_wpse_94776( $post_type, $position, $post )
{
remove_meta_box( 'submitdiv', 'post', 'side' );
}
問題 自動保存とリビジョンにあります。
他の解決策はjQueryでフィールドを読み取り専用にすることでしょうが、多分それはそれほど堅実ではありません。
最後に、別のオプションは 削除 TitleとContentフィールドおよび printing 単純なテキストの置き換えです。