对环境的简要说明:
在我的网站上,帖子应根据某些标准进行排序。该网站被翻译成不同的语言。首先,帖子应按发布日期排序。日期存储在元字段“ 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专家,所以请不要太苛刻。感谢您的帮助和建设性的反馈。
对环境的简要说明:在我的网站上,帖子应根据某些标准进行排序。该网站被翻译成不同的语言。首先,帖子应按...
我认为您的问题在于逻辑不一致。