我想在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 dump:
...
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 ));
以alpha顺序转储页面名称。
答案 0 :(得分:0)
这是两个错误的混合。
我的查询非常错误,以及ACF文档。它应该是
'post_type' => 'page',
'posts_per_page' => -1,
'orderby' => 'meta_value',
'meta_key' => 'title',
'order' => 'ASC'
ACF文档说它应该是'meta_key_num'
,但这对我不起作用。我可以使用'meta_value'
通过自定义ACF字段订购。