自定义查询:如果一个发布对象字段值与另一个相同

时间:2018-08-26 作者:Pete Hayman

是否可以构造If/Else查询,查看两个(或更多)Post对象字段是否相同,即如果Post对象字段1的“值”与Post对象字段2相同,则返回X,否则返回Y?

举一个实际的例子,我有一个CPT叫做Matches; 包含我的团队进行的个人比赛信息的条目。每个Match 由三个ACF现场小组组成:一个小组负责排队(名册);一张用于进球者,一张用于黄牌/红牌。

在每个组中,我都使用Post Object选项将条目与我的Players CPT。我能够使用PL1中的以下代码输出每个游戏的队列,如果合适,可以重复到P18:

<li class="team-player">
    <?php 
        $pl1 = get_field(\'pl1\');
        if($pl1) 
    ?>
    <a href="/players/<?php echo $pl1->post_name; ?>/">
        <span class="team-player-number"><?php the_field(\'sn1\'); ?></span>
            <span class="team-player-name">
                <?php echo $pl1->post_title; ?>
            </span>
        </span>
    </a>
<?php endif; ?>
</li>
对于阵容中的每个球员(例如PL1),我想构造一个If/Else查询,该查询与得分手场组(然后是卡片)连接。本质上,我想问PL1中的球员帖子对象是否与Scorer 1中的球员帖子对象相同,是否回显图像。

我不确定的是如何构造它。我已经单独尝试了以下代码行中的一些内容,但没有效果。我在google上没有找到任何东西,尽管我意识到我可能没有任何价值观可以与我所尝试的进行比较:

<li class="team-player">
    <?php 
        $pl1 = get_field(\'pl1\');
        if($pl1) 
    ?>
    <a href="/players/<?php echo $pl1->post_name; ?>/">
        <span class="team-player-number"><?php the_field(\'sn1\'); ?></span>
            <span class="team-player-name">
                <?php echo $pl1->post_title; ?>
            </span>
        </span>
        <span class="team-player-event">
        <?php 
            $s1 = get_field(\'s1\');
            if( $s1 != \'30330\' ): 
                echo \'-\';
            elseif ( $s1 = get_field(\'pll\') ):
                echo \'<img class="team-event-image" src="/icons/goal.svg">\';
            endif;  ?>
        </span>
    </a>
<?php endif; ?>
</li>
目前,它正在为一切返回“-”。我还有一个额外的问题,那就是有11个得分手场(11-1是我们创纪录的胜利)。所以我想我必须先让它在一对一的基础上工作,然后再弄清楚如何将它扩展成一个数组?i、 e.如果得分者1-11与球员X相同。

以一种既不低效又不慢的方式。能做到吗?我走对了吗?

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

就像我在评论中指出的那样,你可以通过与球员的帖子ID进行比较,找出“球员”是“进球者”还是“黄牌/红牌持有者”。

因此,假设与以下内容“匹配”:

9个“玩家”(ACF字段:pl1pl9)

3名“进球者”(ACF字段:s1s3)

1“卡”(ACF字段:y1)

现在,要将单个“球员”与单个“进球者”或“持卡人”进行比较,可以这样做:

$pl1 = get_field( \'pl1\' ); // PL1; player
$s1 = get_field( \'s1\' );   // S1; goal scorer
$y1 = get_field( \'y1\' );   // Y1; card holder

// Check if S1 == PL1
if ( $pl1 && $s1 && $s1->ID == $pl1->ID ) {
    echo \'S1 equals PL1<br>\';
}

// Check if Y1 == PL1
if ( $pl1 && $y1 && $y1->ID == $pl1->ID ) {
    echo \'Y1 equals PL1<br>\';
}
但要将单个“球员”与所有可用的“进球者”和/或“持卡人”进行比较,您可以使用get_fields() 功能如下:

$pl1 = get_field( \'pl1\' ); // PL1; player
$fields = get_fields( false, false );

$total_goals = 0;
$total_cards = 0;
$pl1_cards = 0;
$pl1_goals = 0;

foreach ( $fields as $key => $post_id ) {
    // Check if the field name is \'s{n}\' where {n} is a number. If yes,
    // then it\'s a \'goal scorer\' field. (based on your naming style)
    if ( preg_match( \'/^s(\\d+)$/\', $key ) ) {
        // Check if PL1 == S{n}
        if ( $pl1 && $post_id == $pl1->ID ) {
            echo strtoupper( $key ) . \' equals PL1<br>\';
            $pl1_goals++;
        }

        $total_goals += $post_id >= 1 ? 1 : 0;
    }

    // Check if the field name is \'y{n}\' where {n} is a number. If yes,
    // then it\'s a \'card holder\' field. (based on your naming style)
    if ( preg_match( \'/^y(\\d+)$/\', $key ) ) {
        // Check if PL1 == Y{n}
        if ( $pl1 && $post_id == $pl1->ID ) {
            echo strtoupper( $key ) . \' equals PL1<br>\';
            $pl1_cards++;
        }

        $total_cards += $post_id >= 1 ? 1 : 0;
    }
}

echo \'<p>\' .
    \'This match had \' . $total_goals . \' goals and \' . $total_cards . \' cards.<br>\' .
    \'Player "PL1" had \' . $pl1_goals . \' goals and \' . $pl1_cards . \' cards.<br>\' .
\'</p>\';
$fields = get_fields( false, false );, 如果将第二个参数设置为true (这是默认值),然后重命名$post_id$post_obj, 和使用$post_obj->ID == $pl1->ID$post_obj->ID >= 1.

此外,这些变量用于演示目的:$total_goals, $pl1_goals, $total_cards, 和$pl1_cards. 因此,您可以忽略/删除它们。但是,如果$total_goals 等于$pl1_goals, 那么你可以说所有的进球都是由PL1完成的。

希望这个答案对您有所帮助,如果您需要进一步的帮助,或者如果我误解了什么,请告诉我。=)

结束

相关推荐

PHP -> SQL Query with Summing

因此,我试图显示客户帐户的已付款交易总额:SELECT SUM(`payment_amount`) FROM `wp_gf_entry` WHERE `created_by` = \'2\' AND `form_id` = \'37\' AND `payment_status` = \'Paid\' 它在SQL中运行良好,但我在PHP中缺少了一些东西:add_filter(\'gform_field_value_user_retainer\', \'gf