danielbachhuber
  • 0
Новичок

Показывать неопубликованные сообщения пользователям, не выполнившим вход?

  • 0

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

Было просто вывести список всех неопубликованных сообщений в одном представлении, запросив в базе данных сообщения с расширением post_status != 'publish' . Я хотел бы настроить его таким образом, чтобы как вошедшие, так и незарегистрированные посетители могли щелкнуть заголовок и просмотреть сообщение в одном представлении. По умолчанию WordPress возвращает ошибку 404, если у вас нет достаточных разрешений. Я считаю, что разрешения на просмотр обрабатываются в объекте запроса, и я не вижу простого способа их отменить.

Есть креативные идеи? Заранее спасибо.

Share
  1. Поскольку я не могу опубликовать более одной ссылки, вот как мы обрабатываем сообщения с запросами в представлении «мульти-питч»: github.com/studio20nyu/Assignment-Desk/blob/master/php/…

    • 0
  2. Ответил на свой вопрос по этому поводу. Как оказалось, в WordPress 2.9.2 это было довольно просто. По сути, я применил фильтр к ‘the_posts’, который запускал бы другой запрос, если бы объект был пуст. Поскольку мы просматриваем сообщения, которые не были опубликованы, нам также необходимо использовать собственный пользовательский SQL. Попытка использовать объект WP_Query приведет вас к бесконечному рекурсивному циклу.

    • 0
  3. Если вы используете WP 3.0+, вы должны иметь возможность использовать метод register_post_status() для регистрации нового статуса как общедоступного. Я еще не вижу этого в кодексе, но ниже то, что задокументировано:

    /**
     * Register a post type. Do not use before init.
     *
     * A simple function for creating or modifying a post status based on the
     * parameters given. The function will accept an array (second optional
     * parameter), along with a string for the post status name.
     *
     *
     * Optional $args contents:
     *
     * label - A descriptive name for the post status marked for translation. Defaults to $post_status.
     * public - Whether posts of this status should be shown in the admin UI. Defaults to true.
     * exclude_from_search - Whether to exclude posts with this post status from search results. Defaults to true.
     *
     * @package WordPress
     * @subpackage Post
     * @since 3.0.0
     * @uses $wp_post_statuses Inserts new post status object into the list
     *
     * @param string $post_status Name of the post status.
     * @param array|string $args See above description.
     */
    function register_post_status($post_status, $args = array()) {....
    

    Исходя из этого, вы должны просто позвонить:

    function add_pitch_status() {
        register_post_status('pitch', array('public'=>true));
    }
    add_action('init', 'add_pitch_status');
    
    • 0

Оставить ответ

You must login to add an answer.