WP_Query上的自定义排序(乱码)>>

问题描述 投票:0回答:1

对环境的简要说明:

在我的网站上,帖子应根据某些标准进行排序。该网站被翻译成不同的语言。首先,帖子应按发布日期排序。日期存储在元字段“ publication_date”中。帖子具有元值“ premium”。如果为true,则将在“ premium”为false的帖子上方设置它,而不考虑其发布日期。因此,溢价帖子应始终放在首位,并按日期排序。此外,仅当您使用网站的正确语言版本时,才考虑元值“ premium”。这取决于元值“域”。这是一个可能有多个值的选择字段。例如,如果我使用的是西班牙文版本的网站,则在元值“ domain”中包含“ Spain”且元值“ premium”为true的所有帖子都应显示在顶部。

对于查询,我使用Search&Filter Pro插件(documentation)。它已经负责按日期排序。

这是我的查询内容:

$args = array(
    'search_filter_id' => $searchandfilter_id,
);
$ads_query = new WP_Query( $args );

// premium sort
usort( $ads_query->posts, 'premium_sort' );

/* the loop */

这是到目前为止我的高级排序功能:(如果网站的当前语言与'domain'元字段匹配,则功能check_main_and_additional_domains()返回true,否则为false)

function premium_sort( $a, $b ) {
    $a_premium = get_post_meta( $a->ID, 'premium', true );
    $b_premium = get_post_meta( $b->ID, 'premium', true );

    if ( check_main_and_additional_domains( $a->ID ) && check_main_and_additional_domains( $b->ID ) ) {
        if ( $a_premium && $b_premium ) {
            return 0;
        }
        if ( ! $a_premium && ! $b_premium ) {
            return 0;
        }
        if ( ! $a_premium && $b_premium ) {
            return 1;
        }
        if ( $a_premium && ! $b_premium ) {
            return -1;
        }
    }

    if ( ! check_main_and_additional_domains( $a->ID ) && ! check_main_and_additional_domains( $b->ID ) ) {
        return 0;
    }

    if ( ! check_main_and_additional_domains( $a->ID ) && check_main_and_additional_domains( $b->ID ) ) {
        if ( $b_premium ) {
            return 1;
        }
    }

    if ( check_main_and_additional_domains( $a->ID ) && ! check_main_and_additional_domains( $b->ID ) ) {
        if ( $a_premium ) {
            return 1;
        }
    }
}

我在正确排序时遇到困难。有时它起作用,有时却不起作用。我不是PHP专家,所以请不要太苛刻。感谢您的帮助和建设性的反馈。

对环境的简要说明:在我的网站上,帖子应根据某些标准进行排序。该网站被翻译成不同的语言。首先,帖子应按...

php wordpress sorting usort
1个回答
0
投票

我认为您的问题在于逻辑不一致。

© www.soinside.com 2019 - 2024. All rights reserved.