Как исключить или фильтровать защищенные паролем сообщения при использовании next_post_link () previous_post_link

Я использую next_post_link () и previous_post_link () в своей теме. Я исключил свои защищенные паролем сообщения из цикла. Они появляются только в том случае, если вы вводите URL этой конкретной записи.

Но проблема в том, что у меня есть next_post_link () и previous_post_link (), появляющиеся в каждом отдельном сообщении. Поэтому, когда я нахожусь в должности, которой преуспевает или предшествует запись с защитой паролем, в папке отображается сообщение с защитой паролем.

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

Я попытался использовать фильтры и функции, предусмотренные в кодексе, но ни один из них не работает так, как мне нужно.

Solutions Collecting From Web of "Как исключить или фильтровать защищенные паролем сообщения при использовании next_post_link () previous_post_link"

Функция next_post_link() разрешает excluded_terms , с параметром excluded_terms . Добавьте список идентификаторов сообщений, защищенных паролем, к этому параметру.

Вы получаете список всех защищенных паролем сообщений в следующем примере с помощью выбора DB.

$password_pages = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND post_password !=''");

В альтернативе вы можете использовать крючок для фильтрации защищенного паролем сообщения из цикла. Также приведен ниже пример, который работает на одном и на странице просмотра переднего конца.

 // Filter to hide protected posts function exclude_protected($where) { global $wpdb; return $where .= " AND {$wpdb->posts}.post_password = '' "; } // Decide where to display them function exclude_protected_action($query) { if( !is_single() && !is_page() && !is_admin() ) { add_filter( 'posts_where', 'exclude_protected' ); } } // Action to queue the filter at the right time add_action('pre_get_posts', 'exclude_protected_action');