将父页面列表限制为仅由当前用户创建的页面

时间:2019-07-27 作者:Honza

我认为这篇文章的标题很自我描述,但我想限制父页面列表(在编辑页面表单中)仅限于那些由登录用户创建的页面-列表应按作者过滤。

E、 g.用户foo 创建了“动物”和“车辆”页面。现在,他想创建一个新的页面“狗”。他创建新页面,填写标题和内容,并希望更改父页面。他点击带有父页面列表的选择框,只会看到“动物”和“车辆”。保存新页面“狗”后,他将看到“动物”、“车辆”和“狗”。

我认为应该是一些Wordpress过滤器(由函数创建add_filter()), 但我是Wordpress的“新手”,所以我现在无法创建它。你能帮帮我吗?

非常感谢你。

1 个回复
SO网友:nmr

经典编辑器

您可以使用过滤器挂钩page_attributes_dropdown_pages_args 和设置authors 查询参数中的参数。

add_filter( \'page_attributes_dropdown_pages_args\', \'se343814_own_post_as_post_parent\', 10, 2 );

function se343814_change_post_type_args( $dropdown_args, $post )
{
    //
    // for which types to apply the filter
    if ( $post->post_type != \'page\' )
        return $dropdown_args;

    $dropdown_args[\'authors\'] = get_current_user_id();

    return $dropdown_args;
}
如果是块编辑器,上述解决方案将不起作用。可以设置为父级的帖子列表由REST请求检索,其中context 参数设置为edit.我不知道在初始化编辑器时是否可以更改请求数据,可能没有这样的过滤器。

但是,您可以使用rest_{$post_type}_query 过滤器与context 这是在请求中设置的。

add_filter( \'rest_page_query\', \'se343814_rest_own_post_as_post_parent\' , 10, 2 );

function se343814_rest_query_page_parent( $args, $request )
{
    //
    // apply filter only when editing the post
    if ( ! isset($request[\'context\']) || $request[\'context\'] != \'edit\' )
        return $args;

    if ( empty($args[\'author\']) )
        $args[\'author\'] = get_current_user_id();

    return $args;
}