【问题标题】:Hide wordpress page completely完全隐藏wordpress页面
【发布时间】:2020-09-27 09:27:18
【问题描述】:

我开发了我的第一个插件,它通过这种方法以编程方式创建一些页面:

$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 仪表板中完全隐藏它之后,但必须通过以下方式使用:

www.example.com/hsn-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->Menu 中仍然可用,您可以在其中创建导航菜单。

我搜索了它,但我找不到我的问题的完整解决方案:

  1. 我的插件必须创建一些可用这种方式的页面:www.example.com/hsn-form
  2. 我需要从管理仪表板完全隐藏此页面
  3. 我想为这些页面应用模板以添加一些自定义 php 代码。

所以如果有人知道它的完整解决方案,那应该很棒。 提前谢谢!

【问题讨论】:

    标签: php wordpress custom-wordpress-pages wordpress-rest-api


    【解决方案1】:

    将 parse_query 更改为 pre_get_posts

    【讨论】:

    【解决方案2】:

    为了从管理导航菜单中删除页面,您可以挂钩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;
                }
            }
        });
    });
    

    在那个例子中,我们正在寻找一个带有post-new.php slug 的子页面 在带有 slug edit.php 的顶级页面下方。如果找到,它将从导航菜单中完全删除。

    $submenu[2] 部分正在寻找数组中的 slug 元素。如果您想通过子菜单 name 进行匹配,可以将其替换为 $submenu[0]

    【讨论】:

    • 感谢您的回复。我将此添加操作添加到插件的主 php 文件中。脚本是否从 wp 仪表板的左侧菜单中删除子菜单项?我想从页面菜单和外观/菜单中隐藏页面,您可以在其中通过拖放构建导航菜单。我的页面名称是 HSN 编辑,我尝试过并在此处添加名称:$submenu[0] == 'HSN Edit' 或 $submenu[0] == 'hsn-edit',但此页面仍保留在页面之间。
    猜你喜欢
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2019-07-22
    • 1970-01-01
    • 2021-02-14
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多