我想在自定义帖子类型中维护许多规则。 规则基本上将包含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
}
}
所以-我在规则和条件满足的情况下通过规则列表查找运行内容:-)
答案 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
}
}
如果您需要多个条件,则无需分组在一起,并创建第四个字段,该字段说明条件是或或以及它们之间的连接。在这种情况下,循环会发生变化,就像您分别检查每个条件,然后寻找第二个条件集(或/和)是否满足您的操作要求一样。