我已经创建了两种WordPress自定义帖子类型(学校、个人)。每个人都与一所学校和相关学校的职位相关ID
存储在该人员的职位下的wp\\U Posteta中ID
具有meta_key = \'person-school-id\'
和meta_value
= 相关学校岗位ID
.
我添加了一个person-type
(学生、教师等)和相关学校的名称(通过提取相关学校的post_title
) 给WP编辑人员。php列表通过WP manage_person_posts_columns
和manage_person_posts_custom_column
行动。
我已经为这两个项目添加了过滤功能person-type
和person-school-id
给WP编辑人员。通过WP的php列表restrict_manage_posts
行动
并且,我为person-type
给WP编辑人员。通过WP的php列表request
使用以下内容进行筛选:
$vars = array_merge(
$vars
,array(
\'meta_key\' => \'person-type\',
,\'orderby\' => \'meta_value\'
)
);
到目前为止,一切顺利。所有这些都按预期进行。
但是,我还需要为相关学校的名称添加排序功能(post_title
). 我可以很容易地在相关学校的帖子上排序ID
(因为这是此人的wp\\U Posteta中存储的内容person-school-id
meta_value
字段)在WP期间添加如下内容request
过滤器:
$vars = array_merge(
$vars
,array(
\'meta_key\' => \'person-school-id\',
,\'orderby\' => \'meta_value\'
)
);
但我真的需要
post_title
(非post
ID
) 其职位的职位
ID
在该人的
meta_value
的字段
person-school-id
meta_key
. 类似于:
,\'orderby\' => \'select post_title from wp_posts where ID = \' . meta_value
显然,上述方法行不通。
所有这一切都是为了问:我怎样才能按post_title
相关职位的ID
在另一个帖子的wp\\U Posteta中meta_value
处理WordPress时的字段request
滤器
SO网友:gwc
经过一个短暂的不眠之夜,我的脑子里一直想着这个问题,我有了一个可行的解决方案。我不确定这是否是最好的解决方案,但对于那些可能有类似问题的人,我是这样做的。
首先,我放弃了使用WordPressrequest
筛选此特定顺序。相反,我使用了WPposts_clauses 过滤如下:
add_filter( \'posts_clauses\', \'my_posts_clauses_filter\', 20, 1 );
function my_posts_clauses_filter( $pieces )
{
global $wpdb;
if ( isset( $_GET[ \'post_type\' ] )
and isset( $_GET[ \'orderby\' ] )
and \'person\' == $_GET[ \'post_type\' ]
and \'person_school\' == $_GET[ \'orderby\' ]
and ( \'ASC\' == $_GET[ \'order\' ] or \'DESC\' == $_GET[ \'order\' ] )
)
{
$pieces[ \'join\' ] .= " INNER JOIN {$wpdb->postmeta} my_postmeta1 ON ( {$wpdb->posts}.ID = my_postmeta1.post_id AND my_postmeta1.meta_key = \'person-school-id\' )";
$pieces[ \'join\' ] .= " INNER JOIN {$wpdb->posts} my_posts1 ON ( my_posts1.ID = my_postmeta1.meta_value )";
$pieces[ \'orderby\' ] = \'my_posts1.post_title \' . $_GET[ \'order\' ];
}
return $pieces;
}
就是这样。
一次注意事项。这可能会产生意想不到的后果。我有另一个例程,它使用WP\\u Query返回所有学校的列表进行筛选。添加以上内容后posts_clauses
filter,我的get all schools例程没有返回任何内容$_GET
已设置条目。我通过使用remove_filter
和add_filter
对于上述内容posts_clauses
滤器