我想在Wordpress管理中为自定义帖子类型的自定义元字段中生成一个复选框列表。我正在使用ACF来创建字段。我可以查询所有页面,但不尊重orderby参数。它只是按date_created输出它们。
这是我的问题:
$pageArgs = array(
'post_type' => 'page',
'posts_per_page' => -1,
'nopaging' => true,
'orderby' => 'title',
'order' => 'ASC'
);
$pageArray = array();
$pageQuery = new WP_Query($pageArgs);
if($pageQuery->have_posts()) {
while($pageQuery->have_posts()) {
$pageQuery->the_post();
$pageArray[get_the_permalink()] = get_the_title();
}
}
您可以看到我创建了一个空数组,并在循环期间将查询中的值输入到数组中。如果在循环之后转储数组,则不会反映orderby参数。此外,如果我转储查询对象,它将显示SQL查询,并且仍然按menu_order排序。
$pageQuery转储:
...
public 'request' => string 'SELECT SQL_CALC_FOUND_ROWS wp_8_posts.ID
FROM wp_8_posts
WHERE 1=1 AND wp_8_posts.post_type = 'page' AND ((wp_8_posts.post_status = 'publish'))
ORDER BY wp_8_posts.menu_order, wp_8_posts.post_date DESC LIMIT 0, 10'
...
这是因为查询是在admin中进行的吗?一旦循环完成,我当然可以对数组进行排序,但为了更好地理解WP,我想知道为什么会发生这种情况。
此外,我可以查询它,它会正确地列出页面。。。。
$args = array(
'authors' => '',
'child_of' => 0,
'date_format' => get_option('date_format'),
'depth' => 0,
'echo' => 1,
'exclude' => '',
'include' => '',
'link_after' => '',
'link_before' => '',
'post_type' => 'page',
'post_status' => 'publish',
'show_date' => '',
'sort_column' => 'post_title',
'title_li' => __('Pages'),
'walker' => ''
);
var_dump(wp_list_pages( $args ));
其按阿尔法顺序转储页面名称。
这是两个错误的混合。
我的查询和ACF文档都是错误的。应该是
'post_type' => 'page',
'posts_per_page' => -1,
'orderby' => 'meta_value',
'meta_key' => 'title',
'order' => 'ASC'
ACF文档说应该是'meta_key_num'
,但这对我不起作用。我可以使用'meta_value'
通过自定义ACF字段进行订购。