这是我的问题。
Flawless工具默认发布所有内容,因此如果您想添加图库,它将显示所有用户的所有图库。我想将图库显示限制为仅自定义帖子的当前作者。对于用户可能想要添加到他的页面的所有类型的内容也是如此。
我的理解是pre_get_posts
在这种情况下是完美的。
我们的目标是在自定义帖子上发布他们的内容,因此我使用了pre_get_posts
动作来执行此功能:
function only_current_author( $query ) {
if ( !is_admin() && $query->query_vars['post_type'] != 'nav_menu_item' ) {
$post_id = get_queried_object_id();
$author_id = get_post_field( 'post_author', $post_id );
$query->query_vars['author'] = "$author_id";
}
}
add_action( 'pre_get_posts', 'only_current_author' );
这在使用WordPress 3.9的本地主机上工作正常
现在我已更新到WordPress 4.0,我收到错误404.
我不明白究竟是什么导致了这个问题,两个WordPress版本有什么不同,但我认为这是导致错误404的原因是我无法获得作者ID当前的自定义帖子。
所以,我想知道,你知道在pre_get_posts
行动中定义作者身份的替代方案吗?
或者我应该使用其他方法来过滤将要显示的内容?
我尝试了几种替代方法,例如添加额外的查询或在我的自定义模板中的模板中添加$query->query_vars
,但都没有效果。
我尝试使用$query
中找到的自定义帖子的名称来获取作者ID,似乎没有任何效果。
感谢您的帮助。
答案 0 :(得分:1)
所以,经过一夜好眠,我回到我的问题并找到了解决方案。 如果您认为此解决方案合适,请给我您的反馈意见。
function only_current_author( $query ) {
if ( !is_admin() && $query->query_vars['post_type'] != 'nav_menu_item' ) {
global $wp_query;
$post_id = $wp_query->post->ID;
$post_type = $wp_query->post->post_type;
if( $post_id != 0 && $post_type == 'cpt_mdj' ) {
$post_author_id = get_post_field( 'post_author', $post_id );
$query->query_vars['author'] = $post_author_id;
}
}
}
add_action( 'pre_get_posts', 'only_current_author' );
因此,问题是$post_id = get_queried_object_id();
返回null,因为不可能使用作者ID预先过滤查询。
使用$ wp_query,我能够获得帖子ID,然后是作者ID。
附带问题,$ query和$ wp_query之间的区别是什么,它们在我var_dump时是相同的,但给出了不同的结果。
谢谢!