Php WP按自定义元密钥归档顺序
在Wordpress模板的function.php中,以下代码运行良好Php WP按自定义元密钥归档顺序,php,wordpress,Php,Wordpress,在Wordpress模板的function.php中,以下代码运行良好 // Function accepting current query function my_change_order( $query ) { // Check if the query is for an archive if($query->is_archive()) // Query was for archive, then set order $query-&
// Function accepting current query
function my_change_order( $query ) {
// Check if the query is for an archive
if($query->is_archive())
// Query was for archive, then set order
$query->set( 'order' , 'asc' );
// Return the query (else there's no more query, oops!)
return $query;
}
// Runs before the posts are fetched
add_filter( 'pre_get_posts' , 'my_change_order' );
但我需要通过自定义元密钥订购文章,如\u my\u meta\u vip
。基于此,我尝试了以下几行,但成功了一半,因为只加载具有定义的自定义元键的文章,其他的都丢失了。我怎样才能解决这个问题
function my_change_order( $query ) {
if($query->is_archive())
$query->set( 'orderby' , 'meta_value' );
$query->set( 'meta_key' , '_my_meta_vip' );
return $query;
}
add_filter( 'pre_get_posts' , 'my_change_order' );
如何正确地按自定义元键排序文章?这里的基本问题似乎是查询正在对post和POSTETA表进行内部联接,这就是为什么查询不会返回没有特定post元项的post。你想要的是一个左连接。有关差异的解释,请参见 您应该能够使用
posts\u join
过滤器将内部连接替换为左连接:
add_filter('posts_join', function($join) {
global $wpdb;
// Replace inner join with left join
$search = 'INNER JOIN ' . $wpdb->postmeta;
$replace = 'LEFT JOIN ' . $wpdb->postmeta;
$join = str_ireplace($search, $replace, $join);
return $join;
});
查看以下主题:可能会给你一个清晰的想法最终无法找到任何方法列出所有已定义和未定义
\u my\u meta\u VIP
的帖子
在我的解决方案中,所有\u我的
都填充了启用的或禁用的,以下代码执行此任务:
// Function accepting current query
function my_change_order( $query ) {
// Check if the query is for an archive
if($query->is_archive()) {
// Query was for archive, then set order
$query->set( 'post_type', 'profile' );
$query->set( 'orderby' , 'meta_value' );
$query->set( 'meta_key' , '_my_meta_vip' );
$query->set( 'order', 'DESC' );
} else {
// Return the original query for non-archive pages
return $query;
}
// Return the query
return $query;
}
// Runs before the posts are fetched
add_filter( 'pre_get_posts' , 'my_change_order' );
我看不出它们之间的区别,我的代码也一样(请参阅meta_query is send is assign&send through arrays将不显示未定义\u my_meta_vip
的帖子。
// Function accepting current query
function my_change_order( $query ) {
// Check if the query is for an archive
if($query->is_archive()) {
// Query was for archive, then set order
$query->set( 'post_type', 'profile' );
$query->set( 'orderby' , 'meta_value' );
$query->set( 'meta_key' , '_my_meta_vip' );
$query->set( 'order', 'DESC' );
} else {
// Return the original query for non-archive pages
return $query;
}
// Return the query
return $query;
}
// Runs before the posts are fetched
add_filter( 'pre_get_posts' , 'my_change_order' );