【问题标题】:Set checkbox state based on value根据值设置复选框状态
【发布时间】:2013-12-16 19:50:47
【问题描述】:

我正在为 WordPress 档案创建分类过滤器。 I have the checkboxes working so when selected they redirect the page to the correct URL based on the taxonomy slug.我的问题是页面重新加载后复选框状态重置为未选中。

这是我的代码:

<?php
$workoutmoves = get_terms('Exercise-Types', array('hide_empty' => 0));
?>

<?php if ($workoutmoves): ?>
<h5>Show Me</h5>
<ul class="no-bullet">
    <?php foreach($workoutmoves AS $workoutmove): ?>
    <li>
        <input class="check_box" type="checkbox" value="<?php echo $workoutmove->slug; ?>"><?php echo $workoutmove->name; ?>
    </li>
    <?php endforeach; ?>
</ul>
<?php endif; ?>

我想在输入字段中添加一个 php if 语句并回显 'checked="checked"' 但我不知道如何获取正确的数据来确定是否应该设置它。

任何见解都会有很大帮助。谢谢。

【问题讨论】:

    标签: php wordpress checkbox


    【解决方案1】:

    您只需要使用get_queried_object() wp 函数获取当前分类术语,然后像这样更改您的循环:

        <?php $term_id = get_queried_object()->term_id; #getting current term_id ?>
        <?php foreach($workoutmoves AS $workoutmove): ?>
        <li>
            <input class="check_box" type="checkbox" 
            <?php $workoutmove->term_id==$term_id?'checked':''; ?>
            value="<?php echo $workoutmove->slug; ?>">
            <?php echo $workoutmove->name; ?>
        </li>
        <?php endforeach; ?>
    

    【讨论】:

      【解决方案2】:

      我不是 100% 确定你在做什么。但是,我相信您想突出显示用户所在的当前页面。您将需要一个 if() 来执行此操作。我不知道你有什么可用的数据,想必 WP 会有某种方式给你页面 url,比如:

      if( $workoutmove->slug == $currentSlug )
          echo 'checked="checked";
      

      如果您在 WP 中找不到 url,可以在 PHP 中找到 $_SERVER['REQUEST_URI'];

      #

      第 2 部分:

      $bodyParts = explode( ",", $_GET['types'] );
      

      这会给你一个像这样的数组:

      array('arms','legs','back');

      那么,我想(我对WP不熟悉),在Tom提供的代码中改行:

      <?php $workoutmove->term_id==$term_id?'checked':''; ?>
      

      收件人:

      <?php in_array( $workoutmove->term_id, $bodyParts )  ? 'checked' : ''; ?>
      

      或者给你所有的:

      $bodyParts = explode( ",", $_GET['types'] );
      <?php $term_id = get_queried_object()->term_id; #getting current term_id ?>
      <?php foreach($workoutmoves AS $workoutmove): ?>
      <li>
          <input class="check_box" type="checkbox" 
          <?php in_array( $workoutmove->term_id, $bodyParts )  ? 'checked' : ''; ?>
          value="<?php echo $workoutmove->slug; ?>">
          <?php echo $workoutmove->name; ?>
      </li>
      <?php endforeach; ?>
      

      【讨论】:

      • 当前 slug 不是最好的方法,您需要 ID,使用 $workoutvove-&gt;term_id = get_queried_object()-&gt;term_id。另外,echo 'checked' 就足够了;)
      • 此代码有效&lt;?php if( $workoutmove-&gt;term_id == get_queried_object()-&gt;term_id ) echo 'checked="checked"';?&gt; 但是如何在选定状态下显示多个复选框?
      • 在什么情况下你想这样做?您需要为每种情况创建一个 if() 需要使用您可用的任何变量选择复选框。
      • 所以我有 5 个复选框可以更改 URL - arm 会转到 URL ?exercise-types=arms 但我需要能够选择多个框。 URL 看起来像这样 ?exercise-types=arms,legs,back 现在这个选项只允许我选择分类法并且只允许第一个“检查”
      • @kslambert 我的朋友...在这种情况下,为exercise-types 创建一个自定义页面,并使用WP_Query 和通过GET 的参数进行自定义查询。没那么难;)
      【解决方案3】:

      我会尝试以下方法。

      <?php
          $types = ( ! empty( $_GET['types'] ) ) ? explode( ',', $_GET['types'] ) : false;
          $workoutmoves = get_terms('Exercise-Types', array('hide_empty' => 0)); 
      ?>
      
      <?php if ($workoutmoves): ?>
          <h5>Show Me</h5>
          <ul class="no-bullet">
      <?php foreach($workoutmoves AS $workoutmove): ?>
              <li>
                  <input class="check_box" type="checkbox" <?php ( $types && in_array( $workoutmove->slug, $types ) ) ? 'checked' : ''; ?> value="<?php echo $workoutmove->slug; ?>"> <?php echo $workoutmove->name; ?>
              </li>
      <?php endforeach; ?>
          </ul>
      <?php endif; ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-06
        • 1970-01-01
        相关资源
        最近更新 更多