无需使用用户和角色即可实现基本密码保护

时间:2013-01-01 作者:Dave

我正在使用WooCommerce,希望能够对产品进行密码保护(如果可能的话,最好是整个类别),但不使用用户&;WP中内置了角色功能(因为我需要匿名来宾也能够输入密码)。

我已经尝试了WP中内置的标准post密码保护,但所做的只是阻止显示产品的描述(即“post”的正文),但它不会阻止您查看产品图像、详细信息等(事实上,您也可以购买该产品)。

我自己写了一些东西(基本上,我在我想要保护的任何页面中都包含了一个自定义属性,然后自定义页面模板的PHP代码,以便在显示页面之前需要密码,但我的尝试(到目前为止)并没有100%起作用,因为它们破坏了购物车/结帐过程(我认为这会中断发布的表单数据或其他内容)。

有什么想法吗?

谢天谢地

1 个回复
SO网友:chrisguitarguy

你可以试试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.

结束

相关推荐

Google Map在Tab Plugins的第二个选项卡上无法使用

我正在使用postTabs plugin 和Comprehensive Google Map Plugin, 我的问题是,当我在第二个选项卡上有我的谷歌地图时,地图没有按预期加载。但是如果我把它移到第一个标签上,效果会非常好。。有没有办法让地图在第二个选项卡上工作?实际上,无论我使用哪个选项卡插件,地图都不会正确加载到第二个选项卡上。。欢迎提出任何建议。谢谢:)