私のクライアントはコンピュータ関係者ではありません。私は彼のためにウェブサイトを作りました。いくつかの重要なページがあります。私のクライアントは常にこのページを削除しています。それから私はコード(ページID)を再設定したいです。
特定のページの削除オプションを無効にする方法.
シモンズ:彼はこれらのページを編集することができるかもしれません。削除しないでください。
ユーザーが割り当てられているロールから、機能delete_pages
、delete_others_pages
、およびdelete_published_pages
を削除できます。これにより、完全なユーザーロールがページを削除するのを防ぐことができます。
この動作を1人のユーザーだけに制限するには、専用の新しい役割を作成してそのユーザーに割り当てる必要があります。詳細はJustin Tadlockの Members プラグインを見てください。
$role = get_role('administrator');
$role->remove_cap('delete_pages');
$role->remove_cap('delete_others_pages');
$role->remove_cap('delete_published_pages');
Brian Fegterの答えはほぼ完璧です。
私のテストで彼の答えはあなたが "wp_trash_post"と "before_delete_post"にアクションを変更した場合にのみうまくいくでしょう。
function restrict_post_deletion($post_ID){
$user = get_current_user_id();
$restricted_users = array(21,25,54,2,19);
$restricted_pages = array(2,21,52,64);
if(in_array($user, $restricted_users) && in_array($post_ID, $restricted_pages)){
echo "You are not authorized to delete this page.";
exit;
}
}
add_action('wp_trash_post', 'restrict_post_deletion', 10, 1);
add_action('before_delete_post', 'restrict_post_deletion', 10, 1);
次のようにして、投稿をゴミ箱から削除することを禁止するアクションを作成できます。それはきれいではありませんが、それは動作します。手動でユーザーとページIDを入力する必要があります。
function restrict_post_deletion($post_ID){
$user = get_current_user_id();
$restricted_users = array(21,25,54,2,19);
$restricted_pages = array(2,21,52,64);
if(in_array($user, $restricted_users) && in_array($post_ID, $restricted_pages)){
echo "You are not authorized to delete this page.";
exit;
}
}
add_action('trash_post', 'restrict_post_deletion', 10, 1);
add_action('delete_post', 'restrict_post_deletion', 10, 1);
あなたは非常に簡単にクイック編集とメタボックスの両方からごみ箱のリンクを隠すことができます。 1つはスタイルを使用し、もう1つはpost_row_actionsフィルタを使用して実行します(フィルタを使用しても実行できます - dunno) https://developer.wordpress.org/reference/hooks/post_row_actions/ /
//hide meta with styles
function hide_publishing_actions()
{
global $post;
if ($post_id == 21)
{
if (!current_user_can('administrator'))
{
// stuff here for non-admins
echo '<style type="text/css">#delete-action</style>';
}
}
}
add_action('admin_head-post.php', 'hide_publishing_actions');
add_action('admin_head-post-new.php', 'hide_publishing_actions');
//for quick edit
add_filter('post_row_actions', 'remove_row_actions', 10, 1);
function remove_row_actions($actions)
{
if (!current_user_can('administrator'))
{
if ($post_id == 21)
unset($actions['edit']);
unset($actions['view']);
unset($actions['trash']);
unset($actions['inline hide-if-no-js']);
}
return $actions;
}
これが私がテストし、そのIDによって特定の投稿やページの削除を防ぐ方法の動作を見つけた例です。それはすべてのワードプレスユーザーのために働くはずです:
add_action('wp_trash_post', 'prevent_post_deletion');
function prevent_post_deletion($postid){
$protected_post_id = 67586;
if ($postid == $protected_post_id) {
exit('The page you were trying to delete is protected.');
}
}