【问题标题】:PHP / Wordpress Loop - Creating a separatorPHP / Wordpress 循环 - 创建分隔符
【发布时间】:2014-09-11 11:31:18
【问题描述】:

我有以下功能,它可以抓取并显示与帖子相关的类别,效果很好,但是我想在它们之间放置分隔符,而不是 100% 确定如何实现这一点。谁能帮帮我?

CAT1 CAT2 CAT3

最理想的情况是:

CAT1 / CAT2 / CAT3

注意最后一个没有分隔符

PHP

<ul class="inline-list">
<?php 
  $id = get_the_ID();
  $cats = get_the_category($id);
  foreach ( $cats as $cat ):
?>
    <li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a></li>
<?php
  endforeach;
?>
    <li><?php FoundationPress_entry_meta(); ?></li>
</ul>

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

    正如其他人所解释的,CSS 将是首选方式。但是如果你真的想在 PHP 中这样做,你可以将列表的 html 代码保存到一个变量中,或者通过连接或输出缓冲:

    ob_start();
    foreach ( $cats as $cat ) {
    echo '<li><a href="'.get_category_link($cat->cat_ID).'">'.$cat->name.'</a> /</li>';
    }
    $list = ob_get_clean();
    

    然后您可以使用 substr 函数删除最后 7 个字符(" /&lt;/li&gt;"),并在输出代码之前将“&lt;/li&gt;”放回去:

    echo substr($list, 0, -7).'</li>;
    

    【讨论】:

    • CSS 也是我的偏好,但客户要求 :( 无论如何,这是一种享受!非常感谢!
    【解决方案2】:

    mikemike 的回答是一个完美的解决方案,但如果出于某种原因你想使用代码来做,你可以试试这个。

    <ul class="inline-list">
    <?php 
     $id = get_the_ID();
     $cats = get_the_category($id);
     $count = 1;
     foreach ( $cats as $cat ):
    ?>
    <li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a> </li>
    <?php
     if($count < count($cats)):
       echo '/';
     endif;
    $count++;
    endforeach;
    ?>
    <li><?php FoundationPress_entry_meta(); ?></li>
    </ul>
    

    【讨论】:

      【解决方案3】:

      要在您的代码中执行此操作,您只需执行以下操作:

      <ul class="inline-list">
      <?php 
        $id = get_the_ID();
        $cats = get_the_category($id);
        foreach ( $cats as $cat ):
      ?>
          <li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a></li>
      <?php
        endforeach;
      ?>
          <li class="no-border"><?php FoundationPress_entry_meta(); ?></li>
      </ul>
      

      CSS:

      ul.inline-list li{
        border-right:1px solid #eee;
      }
      ul.inline-list li.no-border{
        border-right:none;
      }
      

      或者,您可以使用nth-childfirst-childlast-child CSS 选择器来实现此目的。

      例如:

      ul.inline-list li {
        border-left:1px solid #eee;
      }
      ul.inline-list li:first-child{
        border-left:none;
      }
      

      此代码在所有lis 的左侧设置了一个浅灰色边框。然后第二个语句从 first li 移除边框。

      border-rightlast-child 也可以达到同样的效果(从 last li 移除边框)。


      在这两种情况下,您都可以使用 CSS 作为分隔符,无论是边框、背景还是使用 before 添加 / 字符。

      【讨论】:

        【解决方案4】:

        你可以计算你做了多少次迭代,如果少于总数,输出分隔符:

        $count = count($cats);
        $i = 0;
        foreach ( $cats as $cat ):?>
            <li>
                <a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a>
                <?php echo ++$i < $count ? '/' : '';?>
            </li>
        <?php endforeach;
        

        现场示例:http://codepad.viper-7.com/7QU7x9

        【讨论】:

        • 这行不通,循环之外还有lis。您还有语法错误。
        • @mikemike 循环外的列表元素似乎是未实现的。还有什么语法错误?
        【解决方案5】:

        如果你只想在 php 中执行此操作,我会从 foreach 循环更改为 for 循环,然后你可以在两者之间破译。

        IE:

        $length = count($cat);
        for ($i = 0; $i < $length; $i++) {
            $cat = $cats[i];
            if ($i + 1 == $length) {?>
                <li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a></li>
            <?php } else { ?>
                <li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a> / </li>
            <?php }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-13
          • 2017-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-26
          • 2016-12-04
          相关资源
          最近更新 更多