不,使用pre_get_posts
单独地但您不必为日期使用单独的字段。
WP_Query
, 虽然没有提供一个简单的查询参数,只按月份和日期对帖子进行排序,但您可以使用posts_orderby
filter hook 要修改ORDER BY
条款(即。ORDER BY <the part here>
) 用于对帖子进行排序。
中的工作示例pre_get_posts
挂钩,设置meta_key
到crimedate
:
// In crimes_orderby_meta():
elseif ( \'crimeanniversary\' == $orderby ) {
$query->set( \'meta_key\', \'crimedate\' );
}
然后在
posts_orderby
hook,你可以使用
STR_TO_DATE()
MySQL中的函数按元值的月份和日期对帖子进行排序:
请注意,我故意使用静态闰年,这意味着29/02
(2月29日)28/02
(2月28日)ASC
.
add_filter( \'posts_orderby\', \'posts_orderby_crimeanniversary\', 10, 2 );
function posts_orderby_crimeanniversary( $orderby, $query ) {
if ( is_admin() && \'crimeanniversary\' === $query->get( \'orderby\' ) ) {
global $wpdb;
$order = ( \'ASC\' === strtoupper( $query->get( \'order\' ) ) ) ? \'ASC\': \'DESC\';
// This means, we still sort by the date, but we "recreate" the date using
// the year 2020 (or any leap year), and month and day from the meta value.
$orderby = "STR_TO_DATE( CONCAT( \'2020-\',
MONTH( {$wpdb->postmeta}.meta_value ), \'-\',
DAY( {$wpdb->postmeta}.meta_value
) ), \'%Y-%m-%d\' ) $order";
}
return $orderby;
}
我希望这会有所帮助,请更正代码中的这些问题:
英寸crimes_add_custom_column_make_sortable()
:
$columns[\'crimeanniversary\'] = \'crimeanniversary\'; // like this
$columns[\'crimeanniversary\'] = \'Crime anniversary\'; // not this
英寸crimes_show_columns()
:get_post_meta($post_id, "crimedate", true) // like this
get_post_meta($post_id, "crimedate", false) // not this
然后用$row_output
— 未定义。不要忘记这里的第四个参数:
add_action(\'manage_posts_custom_column\', \'crimes_show_columns\', 10, 2); // like this
add_action(\'manage_posts_custom_column\', \'crimes_show_columns\'); // not this!