Пояснение:
Я создал форму поиска в моем архиве пользовательских типов записей. 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/