UPDATE:
钩子正在使用“经典”Wordpress过滤器(如post__in
), 所以这可能是Posts2Posts的问题。如果有人有任何想法,我仍在寻求建议。
ORIGINAL POST
我正在尝试在归档页面中按问题编号显示所有帖子。问题是一种自定义的帖子类型(与post2post链接,这就是我使用
parse_query
而不是
pre_get_post
)
<?php
function categories_by_issue ($query) {
if (! $query->is_category() || ! $query->is_main_query()) return;
$query->set( \'connected_type\', \'issue_to_posts\');
$query->set( \'connected_items\', 71); // 71 needs to be dynamic
$query->set( \'nopaging\', true);
}
add_action(\'parse_query\', \'categories_by_issue\');
?>
这个动作挂钩
works fine! 问题是:我需要通过另一个查询获取问题ID。(ID和版本号当然不同,我的“#3”版本有“71”ID)
我试图添加WP_Query
在我的钩子里,这基本上破坏了整个东西。我可以得到我的发行号,但主查询最终显示所有帖子。
<?php
function categories_by_issue ($query) {
if (! $query->is_category() || ! $query->is_main_query()) return;
$issues = new WP_Query ( /* ... */);
$issue_id = $issues->get_posts()[0]->ID;
var_dump($issue_id); // -> 71 : My ID is correct
$query->set( \'connected_type\', \'issue_to_posts\');
$query->set( \'connected_items\', $issue_id);
$query->set( \'nopaging\', true);
}
add_action(\'parse_query\', \'categories_by_issue\');
?>
有没有一种方法可以在钩子中请求一些信息,理想情况下不涉及直接SQL请求?
SO网友:Mayeenul Islam
我不想试试这个。但是,创建一个函数来获取issue_id
? 记住,wp_reset_postdata()
对于WP_Query()
这很重要。
function get_the_issue_id() {
$issues = new WP_Query( /* .... */ );
$issue_id = $issues->get_posts()[0]->ID;
wp_reset_postdata(); //it\'s important
return (int) $issue_id;
}
现在执行
parse_query
事情:
function categories_by_issue ($query) {
if (! $query->is_category() || ! $query->is_main_query()) return;
$query->set( \'connected_type\', \'issue_to_posts\');
$query->set( \'connected_items\', get_the_issue_id() ); //using the function
$query->set( \'nopaging\', true);
}
add_action(\'parse_query\', \'categories_by_issue\');