有没有办法避免重复行

is there a way to avoid duplicate line

嗨,在 wordpress 网站上,我必须向特定用户输出特定内容,我的代码在下方,我的问题是如何避免重复重复行

if (is_user_logged_in() and get_current_user_id() != get_the_author_meta('ID')) {
                        if (in_array('customer', (array) $user->roles)) {
                            if (get_current_user_id() == $authorid) { ?>
                                <i class="fa fa-comments send_designer_msg" designer_id="<?php echo get_the_author_meta("ID"); ?>" logo_number="<?php echo $entryno; ?>" aria-hidden="true"></i>
                            <?php }
                        } else { ?>
                            <i class="fa fa-comments send_designer_msg" designer_id="<?php echo get_the_author_meta("ID"); ?>" logo_number="<?php echo $entryno; ?>" aria-hidden="true"></i>
                    <?php }
                    }

任何帮助谢谢

条件逻辑比较难理解

您想为评论显示一个图标(基于 fontAwesome)——仅适用于满足以下要求的登录用户:

  1. 不是这个post的'designer'。
  2. 具有角色'customer'

不确定,您的条件逻辑设置正确,因为它似乎为任何不是 'designer' 的用户输出评论标记...对不起 – 但是 [=54= 之间的区别在哪里] 和 designer_id?

稍微干一点的实现可能是这段代码:

<?php
$current_user_id = get_current_user_id();
$designer_id = get_the_author_meta("ID");
$author_id = '???';
$show_comment_icon = false;

if (is_user_logged_in() && $current_user_id != $designer_id ) {
    // if user has role "customer" 
    if (in_array ('customer', (array)$user->roles)) {
        // if currently logged in user is the author of the current post?
        if ( $current_user_id == $author_id) { 
            $show_comment_icon = true;
        }
    } else { 
        // if user is not a "customer" 
        $show_comment_icon = true;
    }
 
    // comment icon html template
    $comment_icon = 
    '<i 
        class="fa fa-comments send_designer_msg" 
        data-designer-id="'.$designer_id.'" 
        data-logo-number="'.$entry_no.'" 
        aria-hidden="true">
    </i>';  
    
    // output your html
    if($show_comment_icon){
        echo $comment_icon; 
    }       
}
?>

尽管这个修改后的代码片段肯定存在缺陷: php 中避免重复代码和提高可读性的一些建议:

  • 选择合适的封闭概念(在php和html之间切换时)*
  • 从输出中分离出'data compilation'和逻辑
  • 慷慨地在代码中插入注释
  • 在变量中保存重复查询的值(例如 functions/classes 返回)
  • 最后努力修改你的代码(可能没有人会因为这种努力而奖励你——除了你自己,即使在几年后也能理解你的代码)

enclosing/switching 在 php 和 html 代码之间 您的代码有效。然而,易读性受到影响。 一个可行的经验法则是决定是使用相当封闭的 php-in-html 还是 html-in-php 是比例。

如果涉及更多 php 处理(条件、计算、过滤等),最好使用变量来定义您的 html 输出。

如果 html 模板部分占主导地位,您可以使用类似这样的东西(类似于默认的 wordpress 循环建议):

<?php if($condition_fullfilled) :?>
    <p>Condition is fullfilled – there is a lot more html to come!</p>
    .... (200 lines of html markup)
<?php else: ?>
    <p>Nothing found, matching your conditions</p>
<?php endif; ?>