it-swarm.asia

كيف تمنع مشاركة ما؟

بالنسبة لمشكلة التدقيق ، أريد فقط أن يتم حذف المشاركة ، لكن لا يمكن حذفها - لجميع المستخدمين.

لذلك لدي البرنامج المساعد مثل

add_action('before_delete_post', function($id) {
        wp_die(0);
    });

لكن لا يبدو أن كل إجراءات الحذف هي ajax ، لذلك ستظهر شاشة سوداء مع عرض صفحة خطأ مع النتيجة "0"

ميزة من الحكمة أن الرمز أعلاه على ما يرام ، ولكن هل هناك أي طريقة أفضل؟

8
Yoga

لا تدع الإجراء يموت ، فما عليك سوى إعادة التوجيه (إلى أي مكان تريد):

function wpse_92155_before_delete_post() {
    wp_redirect(admin_url('edit.php'));
    exit();
} // function wpse_92155_before_delete_post
add_action('before_delete_post', 'wpse_92155_before_delete_post', 1);
8
tfrommen

أود استخدام الخطاف before_delete_post كطبقة أخيرة للحماية من الحذف (باستخدام الحل @ tf ، والذي هو الإجابة الصحيحة).

وأولًا قم بإزالة خيارات "حذف" من الأفق. التالي يخفي إجراءات مجمعة و إفراغ سلة المهملات الزر ، ويزيل حذف نهائي صف الإجراء.

before

مع هذا الكود:

add_action( 'admin_head-edit.php', 'hide_delete_css_wpse_92155' );
add_filter( 'post_row_actions', 'hide_row_action_wpse_92155', 10, 2 );
add_filter( 'page_row_actions', 'hide_row_action_wpse_92155', 10, 2 );

function hide_delete_css_wpse_92155()
{
    if( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] ) 
    {
        echo "<style>
            .alignleft.actions:first-child, #delete_all {
                display: none;
            }
            </style>";
    }
}

function hide_row_action_wpse_92155( $actions, $post ) 
{
    if( isset( $_REQUEST['post_status'] ) && 'trash' == $_REQUEST['post_status'] ) 
        unset( $actions['delete'] );

    return $actions; 
}

هذه هي النتيجة:

after

ملاحظة الاهتمام

لا يوجد ربط cpt_row_actions. يتم تطبيق الخطافات page_row_actions و post_row_actionsإذا كان نوع المنشور هرميًا أم لا ، على التوالي.

5
brasofilo