按标题隐藏页面,使其无法编辑

时间:2014-01-18 作者:AndrettiMilas

我有一些自动生成的页面。然后,我使用自定义设置框允许用户交换这些页面上的内容。

问题是,我不希望用户能够删除这些特定页面。其中一页是“免责声明”。我这样做的原因是因为我正在创建一个多站点的法律博客网络,根据美国法律,每个页面都必须有免责声明。

如何从仪表板隐藏这些自动生成的页面(如下面的“免责声明”)by title, 而不是ID?

// If there is no disclaimer page, generate one from its template
$page = get_page_by_title( \'Disclaimer\' );
if(!$page)
{
        wp_insert_post(array(
            \'post_name\' => \'disclaimer\',
            \'post_title\' => \'Disclaimer\',
            \'post_status\' => \'publish\',
            \'post_type\' => \'page\',
            \'post_author\' => 1,
            \'page_template\' => \'page-disclaimer.php\',
        ));
}

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

您可以使用上的筛选器隐藏页面pre_get_posts. 这可以通过设置完成\'post__not_in\' 参数,但该参数需要页面ID。和you don\'t know the id before the page is created.

因此,tou可以运行额外的查询来根据标题检索ID,或者更好地根据slug(即“post\\u name”)检索ID。

add_action(\'pre_get_posts\', \'hide_some_pages\');

function hide_some_pages( $query ) {
  if ( ! is_admin() ) return;
  $screen = get_current_screen();
  if ( $query->is_main_query() && $screen->id === \'edit-page\' ) {
    // add the post_name of the pages you want to hide
    $hide = array(\'disclaimer\', \'hiddenpage\');
    global $wpdb;
    $q = "SELECT ID FROM $wpdb->posts WHERE post_type = \'page\' AND post_name IN (";
    foreach ( $hide as $page ) {
      $q .= $wpdb->prepare(\'%s,\', $page);
    }
    $tohide = $wpdb->get_col( rtrim($q, \',\') . ")" );
    if ( ! empty($tohide) ) $query->set(\'post__not_in\', $tohide);
  }
}

SO网友:Borek

如果要对仪表板中的用户隐藏这一页,可以尝试使用以下内容:

function hide_disclaimer($query) {
    if ( ! is_admin() )
        return $query;
    global $pagenow, $post_type;

    if ( !current_user_can( \'administrator\' ) && is_admin() && $pagenow == \'edit.php\' && $post_type == \'page\' )
        $query->query_vars[\'post__not_in\'] = array( \'1\' ); // Enter your page ID(s) here
}
add_filter( \'parse_query\', \'hide_disclaimer\' );
当然,您必须确定页面ID并将其添加到数组中。使用此代码,您可以向要隐藏的数组添加更多页面。

结束

相关推荐

为什么Get_Pages()返回一个布尔值?

我已经创建了一个自定义的帖子类型,我想使用它允许人们在我的主题主页中添加任意数量的部分。我想循环浏览所有此类帖子,并将其内容包含在页面中。我的问题是get_pages() 具有\'post_type\' => \'home_section\' 似乎返回的是布尔值,而不是数组。下面是我用来测试的代码:<?php $hp_sections = get_pages(array(\'post_type\' => \'home_section\')); echo \'&