奇怪的条件标记行为

时间:2013-11-24 作者:agis

我的注释中包含此代码。php:

<?php
 // If CPT and not logged in, display a message:
 if ( \'CPT\' == get_post_type() && ! is_user_logged_in() ) {
 echo \'<p class="must-log-in" style="padding-left:20px; font-size:20px;">You must be logged in to post a comment.\' . \'</p>\';

 echo do_shortcode("[upme_login]");

 }
 ?>
此代码:

   <?php
 // Don\'t output the comment form if CPT and user isn\'t logged in

  if ( \'CPT\' != get_post_type() || ! array_key_exists( \'comments\', $wp_query->query_vars ) ) {

 comment_form();
 }

 ?>
当用户未登录时,应显示如下消息You must be logged in.... 也就是说,but 我也看到了评论表,这通常是我不应该看到的。

如果我删除此|| ! array_key_exists( \'comments\', $wp_query->query_vars ) 一切正常。

如果用户已登录,如何使其可见?

怎么了?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

在代码的第一个版本中,不检查用户是否登录。

在第二次尝试中,我想你的逻辑是错误的。

因此,您的代码应该如下所示:

<?php
    // If CPT and not logged in, display a message:
    if ( \'CPT\' == get_post_type() && !is_user_logged_in() ) {
        echo \'<p class="must-log-in" style="padding-left:20px; font-size:20px;">You must be logged in to post a comment.\' . \'</p>\';
        echo do_shortcode(\'[upme_login]\');
    }
?>

...

<?php
    if ( \'CPT\' != get_post_type() || (is_user_logged_in() && array_key_exists( \'comments\', $wp_query->query_vars )) ) {
        comment_form();
    }
?>
此代码将:

显示消息“您必须…”如果用户未登录并且正在查看CPT

  • 仅当用户登录时才在CPT上显示评论表单

  • 结束

    相关推荐