Cách vô hiệu hóa xóa trang


7

Khách hàng của tôi không phải là người máy tính. Tôi đã tạo một trang web cho anh ta. Có một số trang quan trọng. Khách hàng của tôi luôn xóa trang này. Sau đó, tôi muốn cấu hình lại mã (id trang).

Làm thế nào để tôi vô hiệu hóa các tùy chọn xóa cho các trang cụ thể.

PS: Anh ấy có thể EDIT những trang này. Không xóa.

Câu trả lời:


10

Bạn có thể loại bỏ các capabilites delete_pages, delete_others_pagesdelete_published_pagestừ vai trò mà người dùng được gán cho. Điều này sẽ ngăn vai trò người dùng hoàn thành xóa các trang.

Để hạn chế hành vi này chỉ với một người dùng, bạn phải tạo và gán một vai trò mới, dành riêng cho người dùng. Nhìn vào plugin Thành viên từ Justin Tadlock để biết thêm thông tin.

Ví dụ: Xóa khả năng xóa các trang khỏi vai trò quản trị viên

$role = get_role('administrator');
$role->remove_cap('delete_pages');
$role->remove_cap('delete_others_pages');
$role->remove_cap('delete_published_pages');

Nhiêu tai nguyên hơn


Roman Wünsche Cảm ơn câu trả lời nhưng tôi muốn sử dụng CHỈ vai trò này cho các trang cụ thể. Có giải pháp nào không. Anh ta là quản trị viên duy nhất trong trang web đó
user8917

5

Câu trả lời của Brian Fegter gần như hoàn hảo.

Trong thử nghiệm của tôi, câu trả lời của anh ấy sẽ chỉ hoạt động nếu bạn thay đổi hành động thành "wp_trash_post" và "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);

3

Bạn có thể tạo một hành động để hạn chế người dùng bỏ rác hoặc xóa các bài đăng như sau. Nó không phải là đẹp nhất, nhưng nó hoạt động. Bạn sẽ phải nhập thủ công ID người dùng và trang.

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);

Brian Fegter, Cảm ơn bạn đã trả lời. Tôi qua mã trong function.php. Nhưng làm thế nào tôi có thể vượt qua Id trang?
dùng8917

ID trang được định nghĩa là $ post_ID trong ví dụ mã.
Brian Fegter

Ví dụ mã của tôi kiểm tra id trang / bài đăng hiện tại so với biến bị giới hạn. Nó cũng kiểm tra người dùng hiện tại một lần nữa với biến giới hạn. Để làm việc này, bạn sẽ phải thêm thủ công $rict_users và $rict_pages.
Brian Fegter

@BrianFegter Không thể làm điều này hoạt động trong WP 3.3.2. Có điều gì đó thay đổi? Tôi đã thay đổi hạn chế và người dùng bị hạn chế để tương ứng với trang và người dùng của tôi.
INT

1
@INT thử wp_trash_post thay thế. Tham chiếu: adambrown.info/p/wp_hooks/hook/trash_post
adrian7

0

Đây là một ví dụ mà tôi đã thử nghiệm và thấy hoạt động về cách ngăn chặn việc xóa một bài đăng hoặc trang cụ thể bằng 'ID của nó. Nó nên hoạt động cho tất cả người dùng wordpress:

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.');
    }
}

1
Điều này chạy ngay trước khi cố gắng để rác bài đăng, không xóa nó. Có một hành động khác nhau cho điều đó, theo như tôi biết.
Shahar Dekel

0

Bạn có thể rất dễ dàng ẩn các liên kết rác từ cả hộp chỉnh sửa nhanh và hộp meta. LÀM một cái bằng cách sử dụng các kiểu và cái kia sử dụng bộ lọc post_row_ilities (bạn có thể thực hiện cả hai bộ lọc - dunno) https://developer.wordpress.org/reference/hooks/post_row_ilities/

//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;
}

0

Bạn cũng có thể sử dụng bộ lọc page_row_ilities (xem https://developer.wordpress.org/reference/hooks/page_row_ilities/ ) được gọi cho mỗi trang trong bảng danh sách trang.

Bạn phải kiểm tra id của bài đăng bạn không muốn chỉnh sửa hoặc xóa, bạn có thể sửa đổi mảng hành động cho các trang này. Nếu bạn trả về một mảng trống, trang sẽ vẫn được liệt kê trong bảng danh sách trang, nhưng không có liên kết để chỉnh sửa, xóa, ... Do đó, trang không thể được chỉnh sửa hoặc xóa.

Chức năng của bạn sẽ như thế này (Lưu ý: Trong mã ví dụ của tôi, chỉ quản trị viên trang mới có quyền sửa đổi trang đặc biệt):

function custom_filter_page_row_actions($actions,$post){
  $page_to_exclude = get_page_by_path(Slug of the page you want to exclude);
  $site_admin_email = get_option('admin_email'); // Get the email of the site admin
  $site_admin =  get_user_by('email',$site_admin_email); // Get WP_User-instance of the site admin
  if(($post == $page_to_exclude) && ($site_admin != wp_get_current_user())){
    $actions = array(); //remove all actions
  }
  return $actions;
}
add_filter('page_row_actions','custom_filter_page_row_actions',999999,2); //Use a high number for this filter so that it is called after all plugins e.g. WPBakery Pagebuilder has add there actions
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.