我正在使用 WordPress 和 Timber 来构建自定义主题。我需要对我的网站页面进行密码保护。我已更改此页面的 WordPress 管理区域中的设置,但开箱即用的 WordPress 功能似乎不适用于 Timber。我搜索了一下,发现了以下代码片段,但它们不起作用。我在这里做错了什么?
按照我的
page.php
逻辑:
$context = Timber::get_context();
$post = new TimberPost();
$context['page'] = $post;
$context['global'] = get_fields('options');
$context['protected'] = post_password_required($post->ID); // here i am trying to check if the current page is password protected and adding the check to the context
$context['password_form'] = get_the_password_form(); // grabbing the function to display the password form and adding it to the context
Timber::render( array(
'pages/page-' . $post->post_name . '.twig',
'pages/page.twig'
), $context );
在我的 Twig 模板中,我尝试过:
{% if protected %}
{{ password_form }}
{% else %}
<!-- rest of page template here -->
{% endif %}
这个
if
检查似乎不起作用,它总是说该页面不受密码保护,即使在 WP 管理中另有指定。 {{ password_form }}
确实正确显示密码形式。
我也在
page.php
中尝试过这个:
$context = Timber::get_context();
$post = new TimberPost();
$context['page'] = $post;
$context['global'] = get_fields('options');
if ( post_password_required($post->ID) ) {
Timber::render('page-password.twig', $context);
} else {
Timber::render(array('pages/page-' . $post->post_name . '.twig', 'pages/page.twig' ), $context);
}
随着
page-password.twig
显示密码表格。这个 if 检查也不起作用。
您可以使用此代码来包含应受密码保护的内容:
if ( ! post_password_required() ) {
// Include password protected content here
}
木材默认输出一个表单来输入密码。
{{page.content}}
但是如果您想知道该页面是否有密码,您可以这样做
$context = Timber::get_context();
$post = Timber::query_post();
$context['post'] = $post;
if ( post_password_required( $post->ID ) ) {
Timber::render( 'single-password.twig', $context );
} else {
Timber::render( array( 'single-' . $post->ID . '.twig', 'single-' . $post->post_type . '.twig', 'single.twig' ), $context );
}
还尝试在私人窗口上查看该页面,因为如果您以管理员身份登录,您将看到一个普通页面。
你的
page.php
看起来不错。那部分应该可以工作。但对于您的 Twig 模板,您需要更改 if-else-标签的语法。您需要使用 Control Structure 标签,因此需要使用 {% %}
而不是回显标签 {{ }}
。
{% if protected %}
{{ password_form }}
{% else %}
{# Rest of the template here #}
{% endif %}
同时,这被作为 Timber 问题 进行讨论,添加密码保护的新推荐方法是使用过滤器:https://timber.github.io/docs/v2/guides/posts/#password -受保护的帖子。