Проблемы с разбивкой по дереву на пользовательский тип сообщения в черновиках - PullRequest
0 голосов
/ 28 мая 2020

Пояснение:

Я создал форму поиска в моем архиве пользовательских типов записей. php, которая работает должным образом для обычных пользователей, использующих Timber (и Bedrock).

Теперь я хочу, чтобы пользователь, имеющий хотя бы роль автора, отображал все сообщения в статусе publi sh или черновика. Идея состоит в том, чтобы позволить автору и другому пользователю, работающему на сайте, видеть, как сообщение отображается в виде списка.

Однако черновики сообщений не учитываются Wordpress или Timber, как ожидалось. Я имею в виду, что у меня опубликовано 5 сообщений и 1 в черновике, и я настроил свои настройки wordpress так, чтобы отображать 1 сообщение на странице.

Как не автор, я могу go с страницы 1 на страницу 6 без проблем. Но как автор, редактор или другая более высокая роль я должен иметь возможность go со страницы 1 на страницу 7 ... и на 6-й странице я могу go на «следующую страницу» благодаря нумерации страниц Timber, но когда я нажимаю на нее, седьмая страница - это страница с ошибкой 404 ...

Что я ожидаю: Я ожидаю, что смогу go до последнего page.

Мой код: My archive-post_type. php выглядит как:

<?php
use \Timber\Timber;

if (!is_user_logged_in()) {
    wp_redirect(home_url().'/login');
    exit();
}
global $paged;
if (!isset($paged) || !$paged) {
    $paged = 1;
}
$context = Timber::context();
$user = wp_get_current_user();
$isSubscriber=$user->roles[0]=="subscriber"?true:false;
if (isset($_REQUEST["entity"])) {
    $search = isset($_REQUEST["searchName"])?$_REQUEST["searchName"]:"";
    $searchContain = $_REQUEST["searchType"]==="contain"?true:false;
    $args=Search('form', $isSubscriber, $searchContain, $search, $paged);
} else {
    $search = "";
    $searchContain = true;
    $args=Search('form', $isSubscriber, $searchContain, $search, $paged);
}

$context['posts']= new \Timber\PostQuery($args);
\Timber\Timber::render('form/list.twig', $context);


function Search($post_type, $isSubscriber, $searchContain, $search, $paged)
{
    global $wpdb;
    $query = "
        SELECT *
        FROM {$wpdb->prefix}posts
        WHERE post_type = '" . $post_type . "'"
    ;

    if ($isSubscriber) {
        $query .= " AND post_status = 'publish'";
        $post_status="publish";
    } else {
        $post_status="any";
    }
    if (!empty($search)) {
        if ($searchContain) {
            $query .= " AND post_title LIKE '%" . $search . "%'";
        } else {
            $query .= " AND post_title LIKE '" . $search . "%'";
        }
    }
    $results=$wpdb->get_results($query);

    if (!empty($results)) {
        foreach ($results as $result) {
            $posts[] = $result->ID;
        }
        return $args = [
            'post__in'          => $posts,
            'post_type'         => $post_type,
            'post_status'       => $post_status,
            'order'             => 'ASC',
            'orderby'           => 'title',
            'posts_per_page'    => get_option('posts_per_page'),
            'paged'             => $paged
        ];
    }
    return [];
}

My list.twig:

{% extends 'layout/base.twig' %}
{% block body %}
    <nav class="breadcrumb">
        {{ breadcrumb() }}
    </nav>
    <div class="container">
        <div class="content-wrap">
            <div class="list-title">
                <h1>Form list</h1>
            </div>
            <div class="list-search">
                <form id="search" method="GET" action="{{ site.link }}/form" class="form">
                    <select class="search-type" name="searchType" form="search">
                        <option selected value="contain">Contain</option>
                        <option value="start">Start with</option>
                    </select>
                    <input type="search" class="search-field" name="searchName" placeholder="Search">
                    <input type="hidden" name="action" value="dynamic_search">
                    <input type="hidden" name="entity" value="for">
                    <input type="submit" value="Search">
                </form>
            </div>
            <div class="list-item">
                {% if posts is not empty %}
                    {% for i, post in posts %}
                        {% set description = post.meta('form-description') %}
                        {% set shortcode = post.meta('form-shortcode') %}
                        {% if shortcode is not empty %}
                            <div class="list-item__body list-item-form item-{{ i }} {% if post.post_status != "publish" %}not-publish{% endif %}">
                                {% if post.post_status != "publish" %}
                                    <div class="ribbon ribbon-top-right"><span>Draft</span></div>
                                {% endif %}
                                <div class="list-item__title">
                                    <a href="{{ url }}./{{ post.slug }}">
                                        <h2>{{ post.post_title }}</h2>
                                    </a>
                                </div>
                                <div class="list-item__description">
                                    {{ description |raw | truncate(15,true, ' ...')}}
                                </div>
                                <div class="list-item__more">
                                    <a href="{{ url }}./{{ post.slug }}">Read more <i class="fas fa-arrow-right"></i></a>
                                </div>
                            </div>
                        {% endif %}
                    {% endfor %}
                {% else %}
                    <p>Forms not found</p>
                {% endif %}
            </div>
        </div>
        <div class="list-pagination">
            {% if posts.pagination.prev %}
                <div class="list-pagination__action list-pagination__prev">
                    <i class="left fas fa-arrow-left"></i>
                    <a href="{{posts.pagination.prev.link}}" class="next {{posts.pagination.prev.link|length ? '' : 'invisible'}}">Previous page</a>
                </div>
            {% endif %}
            {% if posts.pagination.next %}
                <div class="list-pagination__action list-pagination__next">
                    <a href="{{posts.pagination.next.link}}" class="next {{posts.pagination.next.link|length ? '' : 'invisible'}}">Next page</a>
                    <i class="right fas fa-arrow-right"></i>
                </div>
            {% endif %}
        </div>
    </div>
{% endblock %}

Примечание. Я выполнил запрос Что делать, если я не использую запрос по умолчанию? пояснительная часть руководства по разбивке на страницы по дереву: https://timber.github.io/docs/guides/pagination/

...