因此,有两件事是错误的。
首先,您的短代码本身是错误的。
您使用
[check-if-equal usermeta="firstname" uservalue="Jeff"] Yes [/check-if-equal]
但没有什么比
firstname
在Wordpress中
first_name
所以你的短代码应该是这样的,
[check-if-equal usermeta="first_name" uservalue="Jeff"] Yes [/check-if-equal]
完成后,rest看起来很酷。为了正确格式化语法,我编辑了问题本身。所以应该是这样的:
<?php
function func_check_if_equal( $atts, $content = null ) {
if ( is_user_logged_in() ) { /* check if logged in */
$user_meta = $atts[\'usermeta\'];
$user_value = $atts[\'uservalue\'];
/* get value from shortcode parameter */
$user_id = get_current_user_id(); /* get user id */
$user_data = get_userdata( $user_id ); /* get user meta */
if ( $user_data->$user_meta == $user_value ) { /* if user meta is equal meta value */
return $content; /* show content from shortcode */
} else {
return \'\'; /* meta field don\'t equal */ }
} else {
return \'\'; /* user is not logged in */
}
}
add_shortcode( \'check-if-equal\', \'func_check_if_equal\' );
您还要求我改进代码,因此有两件事可以改进。
它应该工作得很好,但你错过的第一件事是,可能有人使用了短代码和类型;“jeff”;而不是;“Jeff”;或者他们可能会写道;“JEFF”;而不是;杰夫;。这可能会有问题,因为它们键入相同的名称,但条件仍然不匹配,因此下面我首先将其用于所有大写小变体,然后删除不必要的其他变体。
其次,您不必要地弄乱了else语句,可以用更简单的方法来完成。这两件事都得到了纠正。
function func_check_if_equal( $atts, $content = null ) {
if ( is_user_logged_in() ) { /* check if logged in */
$user_meta = $atts[\'usermeta\'];
$user_value = $atts[\'uservalue\'];
/* get value from shortcode parameter */
$user_id = get_current_user_id(); /* get user id */
$user_data = get_userdata( $user_id ); /* get user meta */
if ( strtolower($user_data->$user_meta) == strtolower($user_value) ) { /* if user meta is equal meta value */
return $content; /* show content from shortcode */
}
}
return \'\';
}
add_shortcode( \'check-if-equal\', \'func_check_if_equal\' );