如果用户元数据不是带有短码的空内容,如何显示内容

时间:2020-07-28 作者:Olivier

如果用户元数据不为空,我需要显示内容

示例:

[empty_user_meta="last_name"]
Show only if last_name is not empty. 
[/empty_user_meta]
代码不起作用:


    add_shortcode( \'empty_user_meta\', \'user_meta_empty\' );
function user_meta_empty( $atts, $content ) {
   extract(
      shortcode_atts( array( \'meta\' => \'\' ), $atts )
   );
   $meta = explode ($atts[\'meta\'] );
 
   foreach ( $meta as $value ) {
      $value = trim( $value );
      if ( ! empty( $value ) ) {
         return $content;
      }
   }
   return \'\';
}

有人能帮我吗?

1 个回复
最合适的回答,由SO网友:rank 整理而成

您的短代码可以如下所示:

[check-if-empty usermeta="last_name"] Is not empty [/check-if-empty]
参数名为;“用户元”;添加到函数($atts)中,其值用于检查用户数据。

function func_check_if_empty( $atts, $content = null ) { 
    if ( is_user_logged_in() ) { /* check if logged in */
        $user_meta = $atts[\'usermeta\']; /* get value from shortcode parameter */
        $user_id = get_current_user_id(); /* get user id */
        $user_data = get_userdata( $user_id ); /* get user meta */
        if ( !empty( $user_data->$user_meta ) ) { /* if meta field is not empty */
            return $content; /* show content from shortcode */
        } else { return \'\'; /* meta field is empty */ }
     } else {
        return \'\'; /* user is not logged in */
     }
}
add_shortcode( \'check-if-empty\', \'func_check_if_empty\' );
我们使用$atts[\'usermeta\'] 这是last_name 在本例中。在检查用户是否登录后,我们将获取用户数据并使用您的快捷码中的元字段。

这样,您可以检查所有的元字段(如first_name, user_login, user_email) 只需在shortcode参数中使用另一个名为;usermeta;。

例如,如果您现在想在名字不为空的情况下显示某些内容,您可以使用以下短代码:

[check-if-empty usermeta="first_name"] Is not empty [/check-if-empty]