Php 按meta键对Wordpress中的类别文章进行排序
我会尽量使这段话简短明了 我的目标是什么? 我的目标是按meta键对分类页面中的帖子进行排序。我有一个名为“Rating”的类别,该类别中的每个帖子都有一个名为“Rating”的元键,其中是一个数值 例如,我在“评级”中有“A餐厅”和“B餐厅”。一个元键“评级”值为56,另一个为40。我想让他们从最高评级到最低评级(不是按字母顺序、时间顺序或任何其他方式) 我试过什么? 我已尝试将其直接添加到我的category.php文件中:Php 按meta键对Wordpress中的类别文章进行排序,php,wordpress,Php,Wordpress,我会尽量使这段话简短明了 我的目标是什么? 我的目标是按meta键对分类页面中的帖子进行排序。我有一个名为“Rating”的类别,该类别中的每个帖子都有一个名为“Rating”的元键,其中是一个数值 例如,我在“评级”中有“A餐厅”和“B餐厅”。一个元键“评级”值为56,另一个为40。我想让他们从最高评级到最低评级(不是按字母顺序、时间顺序或任何其他方式) 我试过什么? 我已尝试将其直接添加到我的category.php文件中: <?php global $query_string; $p
<?php global $query_string;
$posts = query_posts('posts_per_page=5&cat=rating&meta_key=rating&order=ASC');
?>
在本部分之前(已在category.php文件中):
<?php global $query_string;
$posts = query_posts('posts_per_page=5&cat=rating&meta_key=rating&order=ASC');
?>
以这一部分结束代码:
<?php wp_reset_query(); ?>
我是怎么失败的?
它部分起作用。例如,它确实显示了5篇文章,如果我从“评级”类别中的一些文章中删除了meta键,则不会在此处显示它们(这是正确的,因为查询是显示评级类别中具有评级元字段的文章)。但它并不是按升序或降序排列的
我做错了什么?我应该在我的函数文件中放置任何类型的过滤器、动作挂钩或其他东西吗?有什么东西把我的主题弄乱了吗?(顺便说一下,我没有安装其他插件)
其他文件:
myfunctions.php文件(下面的答案中提到了add_操作钩子)——
My category.php文件-
我的post布局文件(这是在category.php文件中调用的文件-可能相关,也可能不相关)——
您可以在此处查看页面的实时版本——帖子上显示的数字是“评级”元键字段中的数值(减去%符号)。相反,您需要使用来修改主查询,并让它按照元字段的顺序返回帖子。这样,如果您想在以后将此功能扩展到其他类别(或分类法),您只需要在一个地方更改代码 例如:
function wp87615486_custom_sort_rating_category( $query ) {
/**
* Modify the 'rating' category main query
* to have it sort posts by meta rating value.
*/
if (
is_category( 'rating' ) // we're currently viewing the 'rating' category
&& !is_admin() // and we're not in the admin
&& $query->is_main_query() // and this is WP's main query
) {
$posts_per_page = get_option( 'posts_per_page' );
$query->set( 'posts_per_page', $posts_per_page );
$query->set( 'orderby', 'meta_value' );
$query->set( 'meta_key', '_lets_review_final_score' );
$query->set( 'order', 'DESC' ); // ASC will return entries with the lowest rating, DESC the ones with the higher rating
}
}
add_action( 'pre_get_posts', 'wp87615486_custom_sort_rating_category' );
然后您可以在category.php中使用正则表达式。Hi@cabrerahector。感谢您的回答,并对其进行了修改,使其符合我的问题。因此,如果我是正确的-我把它放在functions.php文件中,而category.php中没有任何内容(好吧,没有自定义添加的内容,我只是保持文件原封不动,因为它与主题一起出现),当用户访问分类页面进行“评级”时,它应该工作吗?只是重复检查,这样我就不会把事情搞砸了。是的,基本上就是这样:)你的代码可以写得很完美,但它对我的主题不起作用。我将它添加到functions.php文件中(您可以在我添加到queston的文件中检查它),但是排序没有发生。感谢分享您的代码,这有助于找出问题所在:您使用了错误的元密钥。您正在使用的插件将分数保存在一个名为
的帖子元中,让您查看\u final\u分数
。在您的代码(我将其用作基础)中,您使用的是review
。我相应地更新了我的答案,现在应该可以了。我已经在functions.php文件中添加了代码,但它仍然不会按字母顺序更新。我有一种预感,你的代码会在另一个网站上工作,但在我的网站上不会:(这可能与后期布局模板或类似的东西有关吗?