密码保护页面功能无法在 Timber/Twig (Wordpress) 中开箱即用

问题描述 投票:0回答:3

我正在使用 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 检查也不起作用。

php wordpress twig password-protection timber
3个回答
0
投票

您可以使用此代码来包含应受密码保护的内容:

if ( ! post_password_required() ) {

    // Include password protected content here    

}

0
投票

木材默认输出一个表单来输入密码。

{{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 );
}

还尝试在私人窗口上查看该页面,因为如果您以管理员身份登录,您将看到一个普通页面。


0
投票

你的

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 -受保护的帖子

© www.soinside.com 2019 - 2024. All rights reserved.