如何将来自自定义字段的数据用作IF语句中的表达式?

时间:2019-04-04 14:22:39

标签: php wordpress

我想在自定义帖子类型中维护许多规则。 规则基本上将包含PHP IF构造的表达式部分以及一些输出内容。

在我的插件中,我想遍历这些规则,并为每个规则在IF表达式中使用该规则,然后,如果为true,则对关联的输出内容执行某些操作。

我计划将规则表达式存储为文本字段,但是如何将其用作IF表达式呢?

我试图将表达式添加到PHP中的变量中,然后将该变量用作表达式。这似乎不起作用。

<?php
// Basic idea


// Wordpress query ($args not detailed in this example)
$rules = get_posts( $args );

// Example of post_meta field: tmbd_rule
// Post A -> tmbd_rule = '$varA == 2 && $varB > 17'
// Post B -> tmbd_rule = '$varA == 3 && $varB = 28'

foreach ($rules as $rule) {
    $expression = $rule -> tmbd_rule;
    if ($expression) {
      // Do something clever
    }
}

所以-我在规则和条件满足的情况下通过规则列表查找运行内容:-)

3 个答案:

答案 0 :(得分:0)

您可以使用内置的phps eval()函数来评估规则的结果。

答案 1 :(得分:0)

您可以从表达式语言中受益,它可以在没有Symfony Framework的情况下用作独立库

https://symfony.com/doc/current/components/expression_language.html

例如(取自文档):

class User
{
    public $age;
}

$user = new User();
$user->age = 34;

$expressionLanguage->evaluate(
    'user.age in 18..45',
    [
        'user' => $user,
    ]
); // true

答案 2 :(得分:0)

我现在可以看到两个选项,这是安全的。 @Robert提出的一个。
其次,创建3个输入,两个选择列表和一个文本字段。
1个选择列表将包含变量名称。 (“变量”)
1个选择列表将包含该操作。 (“操作”)
1个文本字段将包含所需的值。 (“值”)

不需要匹配并与ifs“一起”构建条件。

foreach ($rules as $rule) {
  if ($rule->condition == '==' && $rule->variable == $rule->value || $rule->condition == '!=' && $rule->variable != $rule->value) {
    // Do something clever
  }
}

如果您需要多个条件,则无需分组在一起,并创建第四个字段,该字段说明条件是或或以及它们之间的连接。在这种情况下,循环会发生变化,就像您分别检查每个条件,然后寻找第二个条件集(或/和)是否满足您的操作要求一样。