使用 Mustache 和 WordPress 模板化更复杂的 if 语句

Templating more complex if-statements with Mustache & WordPress

我正在使用 Visual Composer(现为 WPBakery)开发自己的 blocks/shortcodes,并通过 Mustache 模板呈现它们。

我正在向模板传递参数,然后根据这些参数(在 Visual Composer 中设置)渲染模板。

我有订阅服务,希望能够根据用户是否登录以及用户是否有有效订阅来切换页面上的内容。

所以我有一个下拉菜单,您可以在其中 select 为哪些用户显示块:

这是我在其中获取参数的text-block-template.php

//returns true/false
$is_active_sub = call_to_sub_api($sessionID);

//Selected in dropdown of which users to show element for
switch ($show_element): 
   case 'all': 
        $user_group = 'all_users';
   case 'subs':
        $user_group = 'subscribers';
   case 'logged_out'
        $user_group = 'inactive';

//Mustache render function (takes a template + variables & renders the template)
render_mustache_func('text-template.mustache', array(
   'text_content' => $text, 
   'user_group' => $user_group, 
   'subscriber' => $is_active_sub
)) 

所以在 Visual Composer 中我会有两个不同的块——每个块都设置为订阅者或注销。

'Welcome back' – 将显示给登录用户

'Sign up or log in now' – 将显示给注销的用户

但是,if 语句似乎无法检查字符串值,我做错了吗?

另外,同一个HTML元素写多次感觉很多余。你会建议另一种解决方案吗?


{{#user_group=all_users}}
<p class="text">{{text_content}}</p>
{{/user_group=all_users}}

{{#user_group=subscribers}}
  {{#subscriber}}
    <p class="text">{{text_content}}</p>
  {{/subscriber}}
{{/user_group=subscribers}}

{{#user_group=inactive}}
  <p class="text">{{text_content}}</p>
{{/user_group=inactive}}

如有任何意见,我们将不胜感激。

Mustache 引擎没有您尝试执行的条件语句。

我认为您可以为每个用户组传递一个包含布尔值的数组,然后检查它们在您的模板中是否不为空。

我还认为你可以用三元运算符替换你的 switch 语句(这将给出布尔值,非常适合该解决方案)。

//returns true/false
$is_active_sub = call_to_sub_api($sessionID);

// Usergroups array
$user_groups = [
    'all_users' => ($show_element === 'all'),
    'subscribers' => ($show_element === 'subs'),
    'inactive' => ($show_element === 'logged_out')
];

//Mustache render function (takes a template + variables & renders the template)
render_mustache_func('text-template.mustache', array(
   'text_content' => $text, 
   'user_groups' => $user_groups,
   'subscriber' => $is_active_sub
));
{{#user_groups.all_users}}
<p class="text">{{text_content}}</p>
{{/user_groups.all_users}}

{{#user_groups.subscribers}}
  {{#subscriber}}
    <p class="text">{{text_content}}</p>
  {{/subscriber}}
{{/user_groups.subscribers}}

{{#user_groups.inactive}}
  <p class="text">{{text_content}}</p>
{{/user_groups.inactive}}