Скрыть защищенные паролем сообщения в admin

Я создаю сайт для клиента, и мы используем встроенную функцию защиты паролем WordPress.

Есть ли фильтр или какое-то действие для фильтрации сообщений, полученных на панели администрирования? Если я хочу, чтобы все защищенные паролем сообщения отображались в панели администратора, можно сказать, что вы не администратор.

Solutions Collecting From Web of "Скрыть защищенные паролем сообщения в admin"

Вы можете использовать параметр WP_Query .

Вот пример того, как вы можете скрыть его, для не-администраторов, на экране edit.php для типа post post:

 /** * Hide password protected posts, for non-admins, in the case of 'edit-post' screen id * * @link http://wordpress.stackexchange.com/a/200426/26350 */ add_action( 'pre_get_posts', function( \WP_Query $q ) { $screen = get_current_screen(); if( is_admin() && ! current_user_can( 'manage_options' ) && is_a( $screen, '\WP_Screen' ) && 'edit-post' === $screen->id ) $q->set( 'has_password', false ); } ); 

Надеюсь, вы сможете настроить это на свои нужды.

PS: было бы удобно иметь функцию get_current_screen_id() , аналогичную функции get_current_user_id() 😉

Обновить

 /** * Hide password protected posts, for non-admins, in the case of 'edit-post' screen id. * Here we don't restrict this to the current user. * * @link http://wordpress.stackexchange.com/a/200426/26350 */ is_admin() && add_action( 'posts_where', function( $where, \WP_Query $q ) { $screen = get_current_screen(); if( ! current_user_can( 'manage_options' ) && is_a( $screen, '\WP_Screen' ) && 'edit-post' === $screen->id ){ global $wpdb; $uid = get_current_user_id(); $where .= $wpdb->prepare( " AND ( ( {$wpdb->posts}.post_password = '' AND {$wpdb->posts}.post_author != %d ) OR ( {$wpdb->posts}.post_author = %d ) ) ", $uid, $uid ); } return $where; }, 10, 2 ); 

Если WP_Query будет поддерживать field_query :

Было бы удобно, если WP_Query будет поддерживать входной аргумент field_query , чтобы упростить работу с полями post.

Вот пример:

 add_action( 'pre_get_posts', function( \WP_Query $q ) { $screen = get_current_screen(); if( is_admin() && ! current_user_can( 'manage_options' ) && is_a( $screen, '\WP_Screen' ) && 'edit-post' === $screen->id ) $q->set( 'field_query', [ 'outer_relation' => 'AND', 'relation' => 'OR', [ 'field' => 'author', 'value' => get_current_user_id(), 'compare' => '=', ], [ 'relation' => 'AND', [ 'field' => 'author', 'value' => get_current_user_id(), 'compare' => '!=', ], [ 'field' => 'password', 'value' => '', 'compare' => '=', ], ] ] ); } ); 

У меня есть проект для такого плагина, так что, возможно, я опубликую его здесь, когда он достигнет альфа-сцены 😉