【问题标题】:Wordpress PHP echo result with query带有查询的 Wordpress PHP 回显结果
【发布时间】:2015-12-02 11:52:42
【问题描述】:

我在页面上有一个结果列表(每个结果都是自定义帖子类型的标题)。每个自定义帖子都附加了元数据(存储在数据库中的 wp_postmeta 中),元数据的一位是变量wedding_hidden_is_completed

对于我将此变量设置为 0 的每个自定义帖子,我想回显一条错误消息。

例如,假设我有 ID 为 1、2、3、4 的帖子,并且只有帖子 2 和 3 将变量 wedding_hidden_is_completed 设置为 1,那么我需要回显 2 条单独的错误消息:帖子 1 错误和帖子 4 出错(这些应包含在单独的 div 中)。

这是我目前所拥有的:

global $wpdb;
$args = array(
'post_type' => 'bookings',
'meta_query' => array(
    array(
        'key' => 'wedding_user',
        'value' => $current_user->display_name,
        'compare' => '=',
    )
)
);
// Errors query
$errors_query = new WP_Query( $args );
// The Loop
if ( $errors_query->have_posts() ) {
while ( $errors_query->have_posts() ) {
    $errors_query->the_post();

// Fill out form \
$is_form_complete = get_post_meta( $errors_query->post->ID, 'wedding_hidden_is_completed', true );

if($is_form_complete !=1) {
$error_message = '<p>Error with post'.$errors_query->post->ID.'</p>';
}

?>
<div class="errors"><?php echo $error_message; ?></div>
<?php
}
}

这当前回显了 4 个 div(每个帖子类型一个),前 3 个表示帖子 1 的错误,最后一个表示帖子 4 的错误。我怎样才能做到这样我只回显每个错误的 div ?

更新:代码显示所有错误 if 语句

if($is_form_complete !=1) {
  $error_message = '<p>Booking form ID DISTR'.$errors_query->post->ID.' needs to be completed.</p>';
  echo '<div class="errors"><i class="fa fa-clock-o"></i>'.$error_message.'</div>';
}

// Deposit due
if($is_deposit_paid !=1) {
  $error_message = '<p>Booking form ID DISTR'.$errors_query->post->ID.' deposit now due.</p>';
  echo '<div class="errors"><i class="fa fa-clock-o"></i>'.$error_message.'</div>';
}

// Full Payment due
if($is_full_amt_paid !=1) {
  $error_message = '<p>Booking form ID DISTR'.$errors_query->post->ID.' remaining balance now due.</p>';
  echo '<div class="errors"><i class="fa fa-clock-o"></i>'.$error_message.'</div>';
}

【问题讨论】:

    标签: php wordpress loops if-statement


    【解决方案1】:

    试试这个...

    替换

    if($is_form_complete !=1) {
    $error_message = '<p>Error with post'.$errors_query->post->ID.'</p>';
    }
    
    ?>
    <div class="errors"><?php echo $error_message; ?></div>
    <?php
    

    if($is_form_complete !=1) {
      $error_message = '<p>Error with post'.$errors_query->post->ID.'</p>';
      echo '<div class="errors">'.$error_message.'</div>';
    }
    

    这样你只有在出现错误时才输出错误 div。根据您的示例,这将阻止它输出相同的错误 3 次。

    更新:

    对于您的多个错误:

    循环之前

    // Define the variable first and give it a default value
    $error_message = null;
    

    然后在你的循环中(使用 .= 让我们添加到变量中)

    // Form not complete
    if($is_form_complete !=1) {
      $error_message .= '<i class="fa fa-clock-o"></i><p>Booking form ID DISTR'.$errors_query->post->ID.' needs to be completed.</p>';
    }
    
    // Deposit due
    if($is_deposit_paid !=1) {
      $error_message .= '<i class="fa fa-clock-o"></i><p>Booking form ID DISTR'.$errors_query->post->ID.' deposit now due.</p>';
    }
    
    // Full Payment due
    if($is_full_amt_paid !=1) {
      $error_message .= '<i class="fa fa-clock-o"></i><p>Booking form ID DISTR'.$errors_query->post->ID.' remaining balance now due.</p>';
    }
    

    最后在关闭循环之后

    // Check if there are any errors to display
    if($error_message != null) {
      echo '<div class="errors">'.$error_message.'</div>';
    }
    

    【讨论】:

    • 好东西 - 你遇到的问题是一旦你设置了 $error_message 它就会保持设置。因此,通过将其全部保留在条件(if)中,它只会在它应该显示的时候显示:)
    • 谢谢西蒙,我想从长远来看,我宁愿将所有消息存储为一个数组(因为会有更多的 if 语句),例如 if($is_deposit_paid !=1) { - 理想情况下我想要一行代码来回显所有错误 - 你认为这可能吗?
    • 是的,这应该是可能的 - 您希望每个预订都有一条错误消息还是一条与所有预订相关的大错误消息?
    • 是的,是后者,所以在页面顶部 - 在所有预订之上是与预订相关的所有错误的列表 - 这有意义吗?让我将我所有的错误 if 语句添加到我的问题中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 2014-04-10
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多