隐藏wp-admin上的某些页面/帖子,显示自定义过滤器

时间:2014-04-30 作者:jammypeach

我正在将一个单独的电子商务CMS集成到wordpress主题中,使用一些页面模板,如购物篮、搜索和结账页面。

到目前为止,这一切都很顺利。然而,有几个动态页面,我通常会制作一个posttype。php模板,但不能像在本例中我不能,因为Wordpress不“知道”,因为数据来自电子商务CMS。例如,产品详细信息页面或产品类别搜索页面。

我的解决方案是创建一个名为product details的模板,并为其创建一个页面。在这个模板中,实际的wordpress页面数据被忽略,而是从电子商务CMS读取数据。

我的直觉是,这不是最好的做法,但如果没有编写一个完整的wordpress插件集成电子商务系统,这是我能想到的最好的方法。

TL;DR

这给我留下的问题是,如果管理员删除该页面,或取消分配模板,商店就会崩溃。所以,我想隐藏这些页面,以帮助防止意外删除或编辑(页面内容对他们来说并不重要)。

是否有办法从wp admin的“所有页面”菜单中隐藏一些页面,除非单击自定义过滤器(例如“系统页面”)?

2 个回复
最合适的回答,由SO网友:Steven Jones 整理而成

您可以使用pre_get_posts() 这将在运行查询之前对其进行调整。因此,我们可以从查询中排除页面。

function wpse_hide_special_pages($query) {

    // Make sure we\'re in the admin and it\'s the main query
    if ( !is_admin() && !is_main_query() ) {
        return;
    }

    // Set the ID of your user so you can see see the pages
    $your_id = 1;

    // If it\'s you that is logged in then return
    if ($your_id == get_current_user_id()) {
        return;
    }

    global $typenow;

    // Only do this for pages
    if ( \'page\' == $typenow) {

        // Don\'t show the special pages (get the IDs of the pages and replace these)
        $query->set( \'post__not_in\', array(\'8\', \'15\', \'14\', \'22\') );
        return;

    }

}
add_action(\'pre_get_posts\', \'wpse_hide_special_pages\');
希望这有帮助。

SO网友:Damian Green

或者,Bryan Gentry描述了一种不同的方法来管理专门针对所需页面的垃圾和删除功能,以便它们只能通过插件删除,如下所示:how-to-prevent-a-wordpress-page-from-being-deleted-by-a-user

结束