0

我正在尝试将 PHP 变量中保存的电子邮件地址与 Wordpress 中短代码中保存的电子邮件地址进行比较,这是我迄今为止尝试过的:

$email = 'someone@something.com';
$user_email = do_shortcode('[userinfo field="user_email"]');
echo var_dump(strcmp($user_email, $email) === 0);

但是var_dump总是返回false,我很肯定它们是完全相同的字符串!

4

3 回答 3

3

默认情况下,短代码userinfo返回包装在<span>标签中的数据。要抑制跨度标记,您可以使用nospan-attribute。

插件的描述如下:

[userinfo nospan="true"] 应该消除周围的 span 标签,以便输出可以在 URL 或类似应用程序中使用

所以你的代码应该是这样的:

$email = 'someone@something.com';
$user_email = do_shortcode('[userinfo field="user_email" nospan="true"]');
$var = (string) $user_email; // Casts to string
$var2 = (string) $email; // Casts to string
echo var_dump(strcmp($var, $var2) === 0);
于 2013-03-08T05:52:41.010 回答
1

您不应为此使用简码,而应仅使用 Wordpress API 函数来获取当前用户的电子邮件地址:

$email = 'someone@something.com';

global $user_email;
get_currentuserinfo();

echo var_dump(strcmp($user_email, $email) === 0);

Worpdress API 函数get_currentuserinfo()将全局变量设置$user_email为字符串形式的当前用户的电子邮件地址。

于 2013-03-08T06:00:33.090 回答
0

查看是否有任何空格以及是否需要修剪任何字符串,因为如果两个字符串相同,那么您的代码似乎已经可以工作。

$email = 'someone@something.com';
$user_email = 'someone@something.com';
$var = (string) $user_email; // Casts to string
$var2 = (string) $email; // Casts to string
echo var_dump(strcmp($var, $var2) === 0);

退货bool(true)

应该do_shortcode('[userinfo field="user_email"]');是需要修剪的。您也可以$user_email在比较之前简单地回显,看看那里是否有任何意外值。

于 2013-03-08T05:35:02.827 回答