WordPress отображает личные сообщения для зарегистрированных пользователей - как отключить эту функцию? - PullRequest
7 голосов
/ 16 июня 2009

В новой установке WordPress 2.8 у меня есть несколько постов, отнесенных к категории Foo, которые ранее были общедоступными, но с тех пор стали конфиденциальными. Когда я вошел в WordPress (как администратор) и случайно просматриваю страницу категории Foo на другой вкладке в том же браузере, я вижу личные сообщения на странице категории с заголовками записей с префиксом « ЧАСТНЫЙ: ".

Теперь в этом нет ничего «сломанного» - сообщения правильно скрыты от не авторизованных пользователей. Но я не хочу, чтобы вошедшие в систему пользователи видели личные сообщения на живом сайте, потому что, честно говоря, это просто раздражает, а не помогает.

Что я должен сделать с WP Loop на странице архива категории или с файлом функций, чтобы отключить эту нежелательную возможность видеть личные сообщения на сайте?

Ответы [ 4 ]

19 голосов
/ 19 июня 2009

Взломать способ сделать то, что вы хотите, это поместить эту строку кода в верхней части цикла (после the_post () part:

if( get_post_status()=='private' ) continue;

Это хакерский способ, потому что ваш WordPress все еще загружает это сообщение из базы данных и учитывает его для подсчета сообщений и т. Д., Но пропускает его при отображении. Если вы ищете фразу, которая была только в личных сообщениях, вы получите пустую страницу без ошибок, например.

Правильный способ сделать это - добавить фильтр, который модифицирует SQL, используемый для генерации списка постов. Самое сложное - не фильтровать его, если вы находитесь в разделе администратора, иначе вы никогда больше не увидите свои личные сообщения. Лучшее место для этого фильтра - файл functions.php вашей темы. Вот что вы должны добавить туда:

add_filter('posts_where', 'no_privates');
function no_privates($where) {
    if( is_admin() ) return $where;

    global $wpdb;
    return " $where AND {$wpdb->posts}.post_status != 'private' ";
}
1 голос
/ 21 июня 2009

Итак, если никто не хочет просматривать эти личные сообщения, включая администраторов, почему бы просто не установить их статус неопубликованным или черновиком?

0 голосов
/ 12 сентября 2018

Почему бы просто не добавить 'post_status' => 'publish' к WP_Query args?

$the_query = new WP_Query( array(
    'post_type' => 'post' ,
    'orderby' => 'date' ,
    'order' => 'DESC' ,
    'post_status' => 'publish',
    'posts_per_page' => 6,
) );
0 голосов
/ 16 июня 2009

Это не прямое решение точного вопроса, но один из способов, которым вы можете скрыть эти сообщения, - назначить их специальной категории, а затем скрыть эту категорию от отображения в цикле. Чтобы исключить сообщения из данной категории из отображения, внутри цикла (сразу после оператора while ()) используйте следующую строку кода:

<?php if (in_category('3')) continue; ?>

В этом примере 3 является идентификатором категории исключаемой категории, и код просто говорит WordPress перейти к следующему сообщению без его отображения.

...