我的问题是:
对于我的文章,我使用自定义的帖子类型“展览”,并发布所有其他新闻。我在一个查询中显示它们[\'post\\u type\'=数组(\'experiments\',\'posts\')]。
这个orderby parameter 对于帖子应该是发布日期,对于展览应该是自定义元值(项目结束日期)。这样,帖子将按以下顺序显示:
展览1(发布日期:2013年1月2日,结束日期:2013年4月4日)
第1篇(发布日期:2013年3月13日)展览2(发布日期:2012年4月1日,结束日期:2013年3月1日)第2篇(发布日期:2013年2月28日)从日期(posts)和结束日期元值(展览)定义PHP变量,然后按其排序
我想到了一个定义PHP变量(展览的结束日期元值,帖子的发布日期)的想法,并据此对wp\\U查询进行排序。
我走的方向对不对?如果是,如何将变量合并到wp\\U查询中?我找到了一些相关的文章/问题,但迄今为止没有一篇对我有帮助。
Orderby筛选器
Orderby filter听起来也是一种方法:
Orderby filter @Wordpress.org forums谢谢
///
约翰尼斯的解决方案正是我想要的。下面是我稍微修改过的函数:
function save_sort_meta( $post_id ) {
$prev_val = get_post_meta( $post_id, \'sort_date\', true );
/* set value only if not set yet (i.e. if this is a new post and not an update ) */
if ( \'exhibitions\' === $_POST[\'post_type\'] ) {
$my_meta = get_post_meta( $post_id, \'_my_meta\', true );
$datum_end_hidden = $my_meta[\'datum-end-hidden\'];
update_post_meta( $post_id, \'sort_date\', $datum_end_hidden);
} else {
/* using time() assuming "end_date" is a unix timestamp, adjust if not */
update_post_meta( $post_id, \'sort_date\', time());
}
}
add_action( \'save_post\', \'save_sort_meta\' );
我的问题是:
$args = array(
\'showposts\' => \'22\',
\'post_type\' => array(\'post\',\'exhibitions\'),
\'post_status\' => \'publish\',
\'meta_key\' => \'sort_date\',
\'order\' => \'DESC\',
\'orderby\' => \'meta_value_num\'
);
出于某种原因,“post”帖子会停留在wp\\u查询的末尾(虽然当我回显自定义值“sort\\u date”时,它会正确显示,并且比experiments大,应该保持“bellow”)。
这是否与我删除查看帖子更新的操作有关?我这样做是因为我也想在更新时更改值。
编辑:以上代码有效
好的,我发现问题出在哪里了-这很尴尬。:)“展览”帖子类型的“结束日期”元值由jQuery UI Datepicker提供,它以毫秒为单位保存日期。
我所需要做的就是将$datum\\u end\\u hidden除以1000。:)
非常感谢!
最合适的回答,由SO网友:Johannes Pille 整理而成
据我所知,如果不对检索到的帖子进行额外的迭代,就无法按两个不同的参数对查询进行排序。
既然理想情况下应该避免这种情况,那么让我建议一种不同的方法:
合并一个附加的元值“sort\\u date”或类似的值怎么样?然后,在保存例程中,将展览的结束日期或发布日期保存为“sort\\u date”。
正在保存:
function save_sort_meta( $post_id ) {
$prev_val = get_post_meta( $post_id, \'sort_date\', true );
/* set value only if not set yet (i.e. if this is a new post and not an update ) */
if ( empty($prev_val) ) {
if ( \'exhibitions\' === $_POST[\'post_type\'] ) {
update_post_meta( $post_id, \'sort_date\', $_POST[\'end_date\'] );
} else {
/* using time() assuming "end_date" is a unix timestamp, adjust if not */
update_post_meta( $post_id, \'sort_date\', time() );
}
}
}
add_action( \'save_post\', \'save_sort_meta\' );
查询:
$args = array(
\'post_status\' => \'publish\',
\'post_type\' = array( \'exhibitions\', \'posts\' ),
\'meta_key\' => \'sort_date\',
\'order\' => \'DESC\',
\'orderby\' => \'meta_value_num\'
);
$exhibitions_and_posts = new WP_Query( $args );
顺便说一句,我建议给帖子类型起一个单数的名字。