对访问者隐藏站点上除特定页面ID之外的所有内容

时间:2016-08-18 作者:talven

我有一个客户,他想关闭对整个网站、每篇文章、分类页、存档等的访问(同时保留内容),除了三个特定页面(开始、关于我们、联系)。

没有一个成员插件可以解决这个问题,只有登录的角色?我觉得这是有史以来最简单的事情,但我似乎无法解决它。

编辑:基本上,我要说的是“如果第x、x或x页”继续,“否则显示消息”。

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

如果要显示消息,请在functions.php 文件-

function se_236335_hide_content( $content ){
    $pages = array( 8, 26, 35 ); // allowed page IDs
    if( ! in_array( get_the_id(), $pages ) ){
        return \'Message here..\';
    }
    return $content;

}
add_filter( \'the_content\', \'se_236335_hide_content\' );
如果需要页面重定向,请使用-

function se_236335_redirect(){
    // allowed pages IDs
    $p1 = 9;
    $p2 = 11;
    $p3 = 35;
    // redirect location
    $location = 9;

    if( ! is_page( [ $p1, $p2, $p3 ] ) ) {
        wp_redirect( get_permalink( $location ) );
        exit();
    }
}
add_action( \'wp\', \'se_236335_redirect\' );

SO网友:bynicolas

另一种方法是使用$query 对象相应地修改查询

add_action(\'init\', \'wpse_236335_hide_content\' );
function wpse_236335_hide_content(){

  // Apply hook everywhere for non logged in users except on wp-login.php page
  if( ! is_user_logged_in() && $GLOBALS[\'pagenow\'] !== \'wp-login.php\' )
    add_action( \'pre_get_posts\', \'my_permitted_content\' );

}


function my_permitted_content( $query ){

  // If we are on any of those pages, by ID, proceed as normal
  if( $query->is_page( array( 9, 11, 35 ) ) ) {
    return;
  }

  // set query so nothing is returned. using trash because trashed post are not shown by design
  $query->set( \'post_status\', \'trash\' ); 

  // if we are not on the blog roll or the home page. redirect to home page.
  if( ! $query->is_home() || ! $query->is_front_page() ){
    wp_redirect( site_url() );
    exit;
  } 

}

相关推荐

如何从USERS-edit.php中删除颜色选择器代码

我知道我不应该改变Wordpress的核心。但如果我想在“用户编辑”中使用仪表板用户配置文件页面。php和删除大块代码(如颜色选择器)的方法。从第259行到第336行-我想全部删除。<?php if ( ! ( IS_PROFILE_PAGE && ! $user_can_edit ) ) : ?> <tr class="user-rich-editing-wrap"> <th scope="