你可以试试template_include
如果帖子有密码保护,则向用户显示一个包含登录表单的完全不同的页面(不更改URL)。结合WordPress内置的post密码功能,你就有了真正接近你想要的东西(阻止整个页面)。
您还可以使用{插入您喜欢的任何方法}}来检查帖子是否需要密码保护。自定义字段、阻止整个类别等。
下面是一个使用template_include
滤器
<?php
add_filter(\'template_include\', \'wpse77865_hijack_template\');
/**
* Hooked into `template_redirect`. Checks to see if we\'re on a singular page
* and if it\'s password protected show the user a completely different page.
*
* @param string $tmp The template
* @uses locate_template
* @return string
*/
function wpse77865_hijack_template($tmp)
{
if (
is_singular() &&
post_password_required(get_queried_object()) &&
($pw = locate_template(\'password.php\'))
) {
// if we\'re here, we are on a singular page
// need a password and locate_template actually found
// password.php in our child or parent theme.
$tmp = $pw;
}
return $tmp;
}
上述内容将取代
single.php
需要密码(例如用户尚未输入密码)且模板文件名为
password.php
在主题和/或子主题中。该模板可能看起来像这样(摘自2012年)。
<?php
/**
* Post password form template.
*
* @package WordPress
*/
get_header(\'password\'); ?>
<div id="primary">
<div id="content" role="main">
<?php while (have_posts()): the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<h1 class="entry-title"><?php _e(\'Password Required\', \'wpse\'); ?></h1>
</header><!-- .entry-header -->
<div class="entry-content">
<?php echo get_the_password_form(); ?>
</div><!-- .entry-content -->
</footer><!-- .entry-meta -->
</article><!-- #post -->
<?php endwhile; // end of the loop. ?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_footer(\'password\'); ?>
如您所见,没有任何内容提示,只有密码表单。用户输入post密码后,将看到正常页面。不确定这是否会影响购物车或结帐程序,但我打赌不会。
这是template_include
一点as a plugin.