在显示自定义帖子类型my\\u post\\u type的内容之前,我当前正在我的主题中使用此代码:
$title = $post->post_title;
query_posts( array (
\'post_type\' => \'page\',
\'posts_per_page\' => -1,
\'my_taxonomy\' => $title
));
这意味着当我去/my\\u post\\u type/some\\u title,我看到所有被指定“some\\u title”作为my\\u分类的页面。
现在我想在插件中做同样的事情,而不是在主题中。这意味着(我猜)我必须使用“请求”过滤器?我尝试过这样做:
add_filter( \'request\', \'alter_the_query\' );
function alter_the_query( $request ) {
$request[\'post_type\'] = \'page\';
$request[\'my_taxonomy\'] = \'some_title\'; // just hardcoded so far while testing
$request[\'posts_per_page\'] = -1;
return $request;
}
但它根本不会返回任何页面。即使这样也不行:
add_filter( \'request\', \'alter_the_query\' );
function alter_the_query( $request ) {
$request[\'post_type\'] = \'page\';
return $request;
}
我做错了什么,或者如何通过调用query\\u posts()实现与我相同的功能?
非常感谢!
SO网友:Jeremy
您提供的代码实际上并没有打印出页面列表;它只是为它们创建查询。假设您有额外的代码来显示它们,在插件中实现所需功能的最简单方法是构建该列表,然后使用the_content
滤器我可能会在一个函数中创建页面列表,将这些页面添加到the_content
在过滤器中添加了第二个函数。以下是一些有助于您起步的内容:
function my_posts_list() {
global $post;
query_posts( array (
\'post_type\' => \'page\',
\'posts_per_page\' => -1,
\'my_taxonomy\' => $post->post_title
));
// Build your HTML list of posts from the query.
}
function filter_the_content($content) {
// Only filter the content if we\'re on a single \'my_post_type\' page.
if (is_singular(\'my_post_type\')) {
$postsList = my_posts_list();
$content = $postsList . $content;
}
return $content;
}
add_filter(\'the_content\', \'filter_the_content\');
当然,你还可以做很多其他的事情,比如检查帖子列表是否为空。
SO网友:mrwweb
WordPress提供了一个很好的钩子,pre_get_posts
我想你正想做什么。
下面是您的代码可能的样子
add_action( \'pre_get_posts\', \'alter_the_query\' );
function alter_the_query() {
if( is_main_query() && get_post_type() == \'my_post_type\' ) {
global $post;
$title = $post->post_title;
$query->set(\'post_type\', \'page\');
$query->set(\'posts_per_page\', -1);
$query->set(\'my_taxonomy\', $title);
}
}
Nacin和其他人建议
pre_get_posts
替换使用
query_posts()
不管怎样,希望这对你有用,让你朝着正确的方向前进。