一种解决方案是create a custom Page template 对于要进行密码保护的页面。
首先创建自定义页面模板,可能命名为template-password-protected.php
, 并添加Template:
顶部的文件docblock标记,如下所示:
<?php
/**
* Template: Password-Protected
*/
?>
现在,添加基本页面模板标记:
<?php
/**
* Template: Password-Protected
*/
?>
<?php get_header(); ?>
<div id="main">
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div id="map" style="width:100%; height:100%"></div>
<?php endwhile; ?>
<?php endif; ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
现在,对其进行修改,以便在页面受密码保护的情况下输出默认内容:
<?php
/**
* Template: Password-Protected
*/
?>
<?php get_header(); ?>
<div id="main">
<?php
// Globalize $post
global $post;
// Test for password-protected page
// Returns true if post is password-protected
// and if the password doesn\'t match cookie
if ( post_password_required( $post ) ) {
?>
<p>
CUSTOM CONTENT THAT DISPLAYS ONLY WHEN PAGE IS PASSWORD PROTECTED
GOES HERE
</p>
<?php
} else {
// Page isn\'t password-protected
?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div id="map" style="width:100%; height:100%"></div>
<?php endwhile; ?>
<?php endif; ?>
<?php } ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
EDIT
基于此评论:
这似乎不起作用,无论我是否登录,我的页面都正常加载。
我怀疑您不是想用密码保护页面,而是想让页面只对登录用户可见?(注意:这两个概念在WordPress中是完全不同的。)
So, running with that assumption, you would want to use is_user_logged_in()
, rather than post_password_required()
.
下面是一个基于
is_user_logged_in()
:
<?php
/**
* Template: Login-Required
*/
?>
<?php get_header(); ?>
<div id="main">
<?php
// Globalize $post
global $post;
// Test for password-protected page
// Returns true if post is password-protected
// and if the password doesn\'t match cookie
if ( ! is_user_logged_in() ) {
?>
<p>
CUSTOM CONTENT THAT DISPLAYS ONLY WHEN USER IS NOT LOGGED IN
GOES HERE
</p>
<?php
} else {
// Page isn\'t password-protected
?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div id="map" style="width:100%; height:100%"></div>
<?php endwhile; ?>
<?php endif; ?>
<?php } ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
总结如下:
密码保护的帖子/页面
应用每个帖子/页面的密码,用户必须输入该密码才能查看帖子/页面内容。此密码在post edit屏幕中设置,并使用该屏幕上提供的UI将post设置为受密码保护。循环中的帖子/页面内容将根据此每篇帖子设置自动保护。
From the Codex:
Password Protect This Post
要对帖子进行密码保护,请单击右上角发布区域中可见性旁边的编辑,然后单击密码保护,单击确定,然后输入密码。然后点击OK。注意-编辑器和管理员用户可以在编辑视图中查看受密码保护的帖子或私人帖子,而无需知道密码。
受登录保护的帖子/页面
与保护帖子/页面的密码完全分离。需要在中包装内容is_user_logged_in()
有条件的,并且不使用或要求每次发布密码。
EDIT 2
看看你的代码,我不得不问:
do you intend to display this map on password-protected pages? 因为这就是您的代码所指示的:
<?php
global $post;
if ( post_password_required( $post ) ) {
?>
<?php $fields = get_acf(); ?>
<script type="text/javascript">
(function() {
window.onload = function() {
...
}}
)
</script>
<div id="map"></div>
此标记表示:
if the post password is required, display this javascript map.
我猜这就是opposite 你想要什么?
请尝试以下操作:
<?php
/**
* @package WordPress
* @subpackage Default_Theme
* Template Name: Page
*/
get_header(); ?>
<?php
global $post;
if ( post_password_required( $post ) ) {
?>
<p>THIS POST IS PASSWORD PROTECTED. PLEASE ENTER THE PASSWORD TO VIEW THIS POST.</p>
<?php
} else {
// No password required, or password has been entered
?>
<?php $fields = get_acf(); ?>
<script type="text/javascript">
(function() {
window.onload = function() {
...
}}
)
</script>
<div id="map"></div>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php endwhile; ?>
<?php endif; ?>
<?
} // Page isn\'t password-protected
?>
<?php get_footer(); ?>
另外:我会将您的自定义模板命名为“页面”以外的其他名称
EDIT 3
回复:此评论:
在哪里输入密码以查看内容?
您需要将呼叫添加到get_the_password_form()
内部post_password_required()
输出下面是一个示例:
<?php
/**
* @package WordPress
* @subpackage Default_Theme
* Template Name: Page
*/
get_header(); ?>
<?php
global $post;
if ( post_password_required( $post ) ) {
?>
<p>THIS POST IS PASSWORD PROTECTED. PLEASE ENTER THE PASSWORD TO VIEW THIS POST.</p>
<?php echo get_the_password_form(); ?>
<?php
} else {
// No password required, or password has been entered
?>
<?php $fields = get_acf(); ?>
<script type="text/javascript">
(function() {
window.onload = function() {
...
}}
)
</script>
<div id="map"></div>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php endwhile; ?>
<?php endif; ?>
<?
} // Page isn\'t password-protected
?>
<?php get_footer(); ?>
现在,应该会出现密码表单。