自定义邮政类型按修改日期排序和自定义元字段问题

时间:2014-04-11 作者:Kamil

我正在创建一个插件,提供一些用户可以发布的服务。用户可以在其自定义管理面板中管理自己的报价。优惠是免费和优质的。如果优惠是特价的,则会高于整个列表中的免费优惠。用户可以每天刷新premium优惠,因此已刷新的优惠将位于列表的顶部。

我是这样想的:出价custom fields "premium" 如果报价为“溢价”,则价值为“2”,否则(免费报价)价值为“1”。

当用户刷新其高级优惠时\'post_modified\' 已更改。

要实现这一点,我必须进行什么样的查询:列表顶部是最新(最新修改日期)的高级优惠(自定义元“premium”等于“2”),下面是其他优惠。

我的实际查询如下所示:

$args = array(
    \'post_type\' => \'mycustomposttype\',
    \'post_status\' => \'publish\',
    \'paged\' => $paged,
    \'meta_key\' => \'premium\',
    \'orderby\' => \'modified meta_value_num\',
    \'order\' => \'ASC\',
    \'meta_query\' => array(
        array(
        \'key\' => \'paid\',
        \'value\' => array(\'paid\',\'free\'),
        \'compare\' => \'IN\'
        )
    ),
);
但最新的报价在列表的末尾。即使我将订单改为“DESC”。任何帮助(或新方法)都将不胜感激。

1 个回复
SO网友:s_ha_dum

如果我理解您的意思,我相信以下内容将满足您的需要:

function orderby_mod_wpse_140999($orderby) {
  remove_action(\'posts_orderby\',\'orderby_mod_wpse_140999\');
  global $wpdb;
  return $orderby.", {$wpdb->posts}.post_modified DESC";
}
add_filter(\'posts_orderby\',\'orderby_mod_wpse_140999\');

$args = array(
  \'meta_key\' => \'premium\',
  \'orderby\' => \'meta_value\',
  \'order\' => \'ASC\'
);
$q = new WP_Query($args);
var_dump($q->request);
密钥名称可能有误,最好将其重写为pre_get_posts 动作,类似于:

function orderby_mod_wpse_140999($orderby) {
  remove_action(\'posts_orderby\',\'orderby_mod_wpse_140999\');
  global $wpdb;
  return $orderby.", {$wpdb->posts}.post_modified DESC";
}
add_filter(\'posts_orderby\',\'orderby_mod_wpse_140999\');

function pgp_orderby_mod_wpse_140999($qry) {
  if ($qry->is_main_query() && is_archive()) {
    $qry->set(\'meta_key\',\'premium\');
    $qry->set(\'orderby\',\'meta_value\');
    $qry->set(\'order\',\'ASC\');
  }
}
add_action(\'pre_get_posts\',\'pgp_orderby_mod_wpse_140999\');
再一次,我猜了一下。对于pre_get_posts 解决方案代码需要转到允许钩子应用于主查询的地方。

结束

相关推荐

隐藏没有子项的分类WP_QUERY和TAX_QUERY

我有这个代码,通过研究花了7个多小时才完成,但在过去的几个小时左右,我遇到了麻烦!如果没有与分类法标题相关的帖子,我要求将其隐藏。页面如下:http://cb.dannycheeseman.me/wine-menu/usa/california/这是我的代码:/**********************************************/ // CUSTOM WINE MENU SHORTCODE /************************************