完全隐藏wordpress页面

问题描述 投票:0回答:1

我开发了我的第一个插件,通过这种方法来程序化地创建一些页面。

$page_id = wp_insert_post(
array(
    'comment_status' => 'close',
    'ping_status'    => 'close',
    'post_author'    => 1,
    'post_title'     => 'HSN Form',
    'post_name'      => strtolower(str_replace(' ', '-', trim('hsn-form'))),
    'post_status'    => 'publish',
    'post_type'      => 'page',
    )
);

我为它设置了模板文件。

add_filter( 'page_template', 'hsn_service_form_page_template', 10, 1 );
function hsn_service_form_page_template( $page_template ){
    if ( is_page( 'hsn-form' ) ) {
        $page_template = plugin_dir_path(__DIR__) . 'service-form/form-template.php';
    }
    return $page_template;
}

之后我想把它从wordpress的仪表盘中完全隐藏起来, 但这些必须通过以下方式来实现:

wwww.example.comhsn-form。

我可以从页面菜单中按以下代码隐藏它。

add_filter( 'parse_query', 'ts_hide_pages_in_wp_admin' );
function ts_hide_pages_in_wp_admin($query) {
    global $pagenow,$post_type;

    $page = get_page_by_path('hsn-form');

    if (is_admin() && $pagenow=='edit.php' && $post_type =='page') {
        $query->query_vars['post__not_in'] = array($page->ID);
    }
}

这是好的,但它仍然可以在Appereance->菜单,你可以创建导航菜单。

我找过了,但我找不到完整的解决方案。

  1. 我的插件必须创建一些页面,这些页面是这样的:www.example.comhsn-form。
  2. 我需要把这个页面从管理面板上完全隐藏起来。
  3. 我想应用这些页面的模板来添加一些自定义的PHP代码。

所以,如果有人知道一个完整的解决方案,这应该是伟大的。

php wordpress custom-wordpress-pages wordpress-rest-api
1个回答
0
投票

将parse_query改为pre_get_posts。


0
投票

为了从管理员导航菜单中删除一个页面,你可以挂入 admin_menu 动作,然后操纵全局的 $submenu 变量。

add_action('admin_menu', function(){

    global $submenu;

    array_walk($submenu, function(&$child, $parent){

        if( $parent != 'edit.php' )
            return;
        foreach($child as $key=>$submenu){
            if( $submenu[2] == 'post-new.php' ) {
                unset($child[$key]);
                break;
            }
        }
    });
});

在这个例子中,我们正在寻找一个子页面,其slug为 post-new.php 在顶层页面的下面,有一个弹头。edit.php. 如果被发现,就会从导航菜单中完全删除。

$submenu[2] 部分正在寻找数组中的slug元素。如果你想通过子菜单中的 名称 取而代之,你可以用 $submenu[0].

© www.soinside.com 2019 - 2024. All rights reserved.