Wordpress — пропускать сообщения/страницы, когда настраиваемое поле равно чему-то

Я пишу плагин, но у меня есть проблема. Когда Wordpress отображает сообщения и страницы на сайте, я хочу, чтобы он пропустил этот пост/страницу, когда настраиваемое поле show_post равно 0 (это упрощенный пример). Как мне это сделать?

Пожалуйста, помните, что это для плагина, а не для темы, поэтому я не могу просто отредактировать тему, чтобы пропустить эти сообщения/страницы.


person Rik de Vos    schedule 22.12.2011    source источник


Ответы (1)


Предполагая, что вы хотите, чтобы плагин работал для всех тем и всех запросов.

Вы можете использовать что-то вроде

<?php
add_filter('posts_where', 'check_show_posts');
function check_show_posts($where) {
    global $wpdb;
    $query = "
        SELECT {$wpdb->prefix}posts.ID as ID
        FROM {$wpdb->prefix}posts
        INNER JOIN {$wpdb->prefix}postmeta m1
          ON ( {$wpdb->prefix}posts.ID = m1.post_id )
        WHERE
        {$wpdb->prefix}posts.post_status = 'publish'
        AND ( {$wpdb->prefix}posts.post_type = 'post' OR {$wpdb->prefix}posts.post_type = 'page' )
        AND ( m1.meta_key = 'show_posts' AND m1.meta_value = '0' )
        GROUP BY {$wpdb->prefix}posts.ID
        DESC;   
        ";

        $posts = $wpdb->get_col($query);
        if($posts) {
            $post_list = implode(',', $posts);
            $where .= sprintf(' AND ID NOT IN ( %s )', $post_list);
        }
        return $where;
}

Обновление: добавлено условие if($posts), чтобы проверить, возвращает ли запрос идентификаторы или нет.

person tamilsweet    schedule 23.12.2011
comment
Это не работает, потому что теперь он не показывает ни сообщений, ни страниц. - person Rik de Vos; 23.12.2011
comment
Причина может заключаться в том, что у вас нет сообщений/страниц с show_posts = 0. Обновлен код и добавлено исправление проблемы. - person tamilsweet; 23.12.2011
comment
@talimsweet добавил `AND ID NOT IN ( 418,400 )`, но этого делать не следует, потому что эти сообщения имеют правильное метаполе/значение. - person Rik de Vos; 23.12.2011
comment
Рад, что у тебя получилось. Пожалуйста, обновите вопрос и добавьте рабочий код, чтобы он мог быть полезен для других. - person tamilsweet; 23.12.2011