WordPress请求过滤器按相关帖子的帖子标题排序

时间:2017-11-14 作者:gwc

我已经创建了两种WordPress自定义帖子类型(学校、个人)。每个人都与一所学校和相关学校的职位相关ID 存储在该人员的职位下的wp\\U Posteta中ID 具有meta_key = \'person-school-id\'meta_value = 相关学校岗位ID.

我添加了一个person-type (学生、教师等)和相关学校的名称(通过提取相关学校的post_title) 给WP编辑人员。php列表通过WP manage_person_posts_columnsmanage_person_posts_custom_column 行动。

我已经为这两个项目添加了过滤功能person-typeperson-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 (非postID) 其职位的职位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 滤器

1 个回复
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_filteradd_filter 对于上述内容posts_clauses 滤器

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post