按自定义字段值进行 WordPress 排序



我使用此代码对交互式必应地图可用的菜单选项进行排序。 提供的代码是为每个类别中的菜单创建列表元素的代码。 我遇到的问题是,它不是按标记编号(mrk_num)对它们进行排序,标记编号是在Wordpress后端声明的自定义字段。 我不知道这是否足以帮助定义我的问题,所以如果您需要更多信息,我会尽力提供。

提供代码后,结果将显示,但未按应有的顺序显示。

function navItems($navSet){
    $args = array( 'post_type' => 'territory_map',
                   'posts_per_page' => -1,
                   'meta_value' => $navSet,
                   'orderby'=>'mrk_num',
                   'order'=>'ASC'
    );
    $loop = new WP_Query($args);
    while ( $loop->have_posts() ) : $loop->the_post();
    $mrkNum = get_custom_field('mrk_num');
    echo '<li><a onclick="activateInfoBox('.get_the_id().', $(this))" href="#">' . $mrkNum . ' ' .get_the_title() . '</a></li>';
    endwhile;
}

$navSet是我从 HTML 调用它时传递给它的类别的名称。 例如,我将传递它"室内景点"

结果将显示,但不是根据字段的升序显示的,mrk_num应有的顺序。 我对此相当陌生,所以我将尝试提供更多您可能需要的信息。

通常,这应该有效。

$args = array( 
    'post_type' => 'territory_map',
    'posts_per_page' => -1,
    'meta_key' => 'mrk_num',
    'orderby'=>'meta_value_num',
    'order'=>'ASC',
    'meta_query' => array(
        array(
            'key' => 'your_key',
            'value' => $navSet,
            'compare' => '='
        )
    )
);

如果它不起作用,我已经体验了您要实现的目标,最好的方法是调试 mysql 查询(例如您可以使用此插件)并在posts_orderby上添加过滤器。

最新更新