Pre_Get_Posts在POST类型的存档中工作,但在单个POST中不起作用

时间:2013-08-09 作者:elclanrs

我有一个自定义的帖子类型“学者”,它有一个档案。我想按一个名为“year”的自定义元字段进行排序,我正在使用pre_get_posts:

add_action(\'pre_get_posts\', \'my_queries\');
function my_queries($query)
{
  if (!$query->is_main_query()) return;

  if ($query->query[\'post_type\'] == \'scholars\') {
    $query->set(\'posts_per_page\', -1);
    $query->set(\'meta_key\', \'year\');
    $query->set(\'orderby\', \'meta_value\');
  }
}
这在归档页面(主列表)中运行良好,但next_post_linkprevious_post_link 在单个帖子中不同步。它们仍然按日期排序,而不是按自定义的“年份”。

我在单个页面上有一个自定义查询,使用WP_Query 显示相关帖子,但我尝试删除它,但仍然不起作用。

这是存档页面:

<div class="large-12 columns">
  <?php
    if (have_posts()) {
      while (have_posts()) {
        the_post();
        // this just loads an <article>
        get_template_part(\'content\', \'scholars\');
      }
    } else {
      echo \'<h2>Nothing found.</h2>\';
    }
  ?>
</div>
这是一页:

<?php the_post() ?>

<div class="large-12 columns">
  <nav class="scholars-navigation">
    <span class="prev"><?php previous_post_link() ?></span>
    <h2><?php the_title() ?></h2>
    <span class="next"><?php next_post_link() ?></span>
  </nav>
</div>

<div class="large-3 columns scholar-info">
  <img src="<?php the_field(\'photo\') ?>" alt="" />
  <h3><?php the_field(\'year\') ?> Scholar</h3>
</div>
你知道为什么它不起作用吗?

Edit: 在查看了其他相关答案后,发现这似乎是不可能的,因为内置功能是现成的this plugin 但我愿意接受任何解决方案。

Edit: Pfff,它甚至不能使用该插件,不知道问题是什么:

next_post_link_plus(\'meta_key=year&order_by=numeric\')

1 个回复
最合适的回答,由SO网友:Charles Clarkson 整理而成

这个next_post_link()previous_post_link() 函数使用的查询与\'pre_get_posts\' 影响。他们使用自己的自定义查询。您必须使用其他过滤器来影响它们。

实际上get_adjacent_post() 函数为next_post_link()previous_post_link() 功能。

以下是该功能的一部分:

$adjacent = $previous ? \'previous\' : \'next\';
$op = $previous ? \'<\' : \'>\';
$order = $previous ? \'DESC\' : \'ASC\';

$join  = apply_filters( "get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories );
$where = apply_filters( "get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.post_date $op %s AND p.post_type = %s AND p.post_status = \'publish\' $posts_in_ex_cats_sql", $current_post_date, $post->post_type), $in_same_cat, $excluded_categories );
$sort  = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1" );
更改next 后期使用\'get_next_post_sort\' 过滤并使用\'get_previous_post_sort\' 筛选器以更改previous 链接

您可以从该代码段中看到$order 在原始查询中,取决于为哪个过滤器编写代码。

很抱歉,我对SQL了解不够,无法编写查询的这一部分。

结束

相关推荐

Open Graph in posts loop page

我有一个循环,所有帖子都有自己的like按钮,当我点击它时,facebook窗口会出现,但它不会显示正确的帖子缩略图。我认为这是正常的,因为在一个帖子循环中,缩略图是多个的,所以脚本无法判断哪一个去了哪里——相反,like按钮在我的单个帖子页面上工作得很好。所以我的问题是:有没有可能让类似facebook的按钮在循环页面上正常工作,这样即使页面中有10篇帖子,它也能抓取正确的帖子缩略图?也许我应该有多个开放图元,为循环中的每个帖子设置一个集合,但我想这只会造成混乱,我能做些什么吗?