Timber / Wordpress - следующий / предыдущий пост с аргументами - PullRequest
0 голосов
/ 02 мая 2019

У меня есть список с длинными и короткими сообщениями.

Короткие сообщения не отображаются на одной странице, потому что они слишком короткие. Я использую поле ACF (тип флажка), чтобы определить короткий пост: article_short

Но когда я на одной странице с длинным сообщением, я бы хотел отобразить следующее / предыдущее доступное длинное сообщение.

Я написал:

$context['prev_next_posts'] = Timber::get_posts(array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'meta_query' => array(
        array(
              'key' => 'article_short',
              'compare' => 'LIKE',
              'value' => 0
          )
      ),
    'orderby' => 'date',
    'order'    => 'DESC',
    'has_password' => FALSE
));

Короткие сообщения хорошо исключены.

В моем файле ветки я приложил свой контекст:

{% if prev_next_posts.next %}
   <a href="{{ prev_next_posts.next.link }}">{{ prev_next_posts.next.title }}</a>
{% endif %}

{% if prev_next_posts.prev %}
   <a href="{{ prev_next_posts.prev.link }}">{{ prev_next_posts.prev.title }}</a>
{% endif %}

Но ничего не отображается ... У вас есть идеи, пожалуйста?

В соответствии с документацией Timber я пытался отобразить сообщение в той же категории с (true). Тот же результат. Ничего не отображается.

https://timber.github.io/docs/reference/timber-post/#next

{% if prev_next_posts.next(true) %}
   <a href="{{ prev_next_posts.next.link }}">{{ prev_next_posts.next.title }}</a>
{% endif %}

{% if prev_next_posts.prev(true) %}
   <a href="{{ prev_next_posts.prev.link }}">{{ prev_next_posts.prev.title }}</a>
{% endif %}

1 Ответ

0 голосов
/ 12 июня 2019

Ваша текущая проблема в том, что prev_next_posts - это просто массив всех ваших длинных статей.POST.next и POST.prev предназначены для работы с одним почтовым объектом.

К сожалению, get_adjacent_post() из коробки ограничивает только исключения терминами, категориями и т. Д., А не meta_key.

Вот быстрый способ решить, что вы пытаетесь выполнить:

single.php:

// Get all long articles, but only their IDs
$long_articles = get_posts(array(
  'post_type' => 'post',
  'post_status' => 'publish',
  'meta_query' => array(
      array(
        'key' => 'article_short',
        'compare' => 'LIKE',
        'value' => 0
      )
    ),
  'orderby' => 'date',
  'order' => 'DESC',
  'has_password' => FALSE,
  'fields' => 'ids', // Only get post IDs
  'posts_per_page' => -1
));

// Get the current index in the array of long article IDs
$current_index = array_search($post->ID, $long_articles);

// Get the previous post if it exists
if (isset($long_articles[$current_index - 1])) {
  $context['previous_post'] = Timber::get_post($long_articles[$current_index - 1]);
}

// Get the next post if it exists
if (isset($long_articles[$current_index + 1])) {
  $context['next_post'] = Timber::get_post($long_articles[$current_index + 1]);
}

Затем в single.twig:

{# Previous post link if it exists #}
{% if previous_post %}
  <div>
    <a href="{{ previous_post.link }}">Previous Post: {{ previous_post.title }}</a>
  </div>
{% endif %}

{# Next post link if it exists #}
{% if next_post %}
  <div>
    <a href="{{ next_post.link }}">Next Post: {{ next_post.title }}</a>
  </div>
{% endif %}
...