بالنسبة لمشكلة التدقيق ، أريد فقط أن يتم حذف المشاركة ، لكن لا يمكن حذفها - لجميع المستخدمين.
لذلك لدي البرنامج المساعد مثل
add_action('before_delete_post', function($id) {
wp_die(0);
});
لكن لا يبدو أن كل إجراءات الحذف هي ajax ، لذلك ستظهر شاشة سوداء مع عرض صفحة خطأ مع النتيجة "0"
ميزة من الحكمة أن الرمز أعلاه على ما يرام ، ولكن هل هناك أي طريقة أفضل؟
لا تدع الإجراء يموت ، فما عليك سوى إعادة التوجيه (إلى أي مكان تريد):
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);
أود استخدام الخطاف before_delete_post
كطبقة أخيرة للحماية من الحذف (باستخدام الحل @ tf ، والذي هو الإجابة الصحيحة).
وأولًا قم بإزالة خيارات "حذف" من الأفق. التالي يخفي إجراءات مجمعة و إفراغ سلة المهملات الزر ، ويزيل حذف نهائي صف الإجراء.
مع هذا الكود:
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;
}
هذه هي النتيجة:
لا يوجد ربط cpt_row_actions
. يتم تطبيق الخطافات page_row_actions
و post_row_actions
إذا كان نوع المنشور هرميًا أم لا ، على التوالي.