【问题标题】:Two foreach statements with variables两个带变量的 foreach 语句
【发布时间】:2013-08-30 03:01:51
【问题描述】:

我正在尝试根据我拥有的类别数量创建一个 URL。我想要的预期输出是:

<a href="http://lart.co.uk/?cat=13" title="Category Name">Dance</a>
<a href="http://lart.co.uk/?cat=19" title="Category Name">Fashion</a>

我得到的输出是:

<a href="http://lart.co.uk/?cat=13" title="Category Name">
<a href="http://lart.co.uk/?cat=19" title="Category Name">
Dance</a> Fashion</a> </a> 

这几乎是我想要的,但显然我还差很多。我正在使用 3 个 foreach 语句来获得这个结果。我试过嵌套一个 foreach 但这没有用。问题在于将结果从一个 foreach 传递到另一个。

这是我正在使用的代码:

<?php
      $categories = get_the_category();
      $separator = ', ';
      if($categories) {
        foreach($categories as $category) {
          $output .= $category->cat_name.$separator;
          $cat_id[] = $category->cat_ID;
        } 
         foreach($cat_id as $id) {
          $category_link = get_category_link( $id ); ?>
          <a href="<?php echo esc_url( $category_link ); ?>" title="Category Name">
          <?php }       
        $strarr = explode(',',$output);
        foreach($strarr as $string) { 
         echo $string .'</a>';
         }

       } ?> 

【问题讨论】:

    标签: php html wordpress foreach


    【解决方案1】:

    像这样简单得多的东西就足够了:

    $categories = get_the_category();
    foreach ($categories as $category) {
        printf('<a href="%s" title="Category Name">%s</a>',
               htmlspecialchars(get_category_link($category->cat_ID)),
               htmlspecialchars($category->cat_name));
    } 
    

    您只需要遍历您的类别,每个类别输出一个链接。仅此而已。

    【讨论】:

    • 哇,这是一个该死的好答案。不过,我对此唯一的疑虑是,我将如何在每个链接而不是最后一个链接之间放置一个“/”。有点像“舞蹈/时尚/音乐”?
    • 不是直接输出,而是将每个链接放入一个数组中:$links[] = sprintf(...),然后在循环后将它们内爆:echo implode('/', $links)
    • 感谢您向我介绍 htmlspecialchars,我以后会牢记这一点 :)
    【解决方案2】:

    你让自己复杂化了,我已经更正了你的代码

    <?php
        $categories = get_the_category();
        $separator = ', ';
        if($categories) {
            foreach($categories as $category) {
                $output .= $category->cat_name.$separator;
                $cat_id[] = $category->cat_ID;
            } 
            foreach($cat_id as $id) {
                $category_link = get_category_link( $id ); 
                $cat_name = get_cat_name($id);?>
                <a href="<?php echo esc_url( $category_link ); ?>" title="<?php echo $cat_name;?>"><?php echo $cat_name; ?></a>
                <?php 
            }
        } 
    ?>
    

    法典:http://codex.wordpress.org/Function_Reference/get_cat_name

    【讨论】:

    • 这行得通,谢谢我知道我在做一些愚蠢的事情。现在我被宠坏了,你的更类似于我正在寻找的答案和方法,但下面的答案之一在一半的行中做到了。
    【解决方案3】:

    试试这个:

    <?php
      $categories = get_the_category();
      $separator = ', ';
      if($categories) {
        foreach($categories as $category) {
          $output .= $category->cat_name.$separator;
          $cat_id[] = $category->cat_ID;
        } 
         foreach($cat_id as $id) {
          $category_link = get_category_link( $id ); ?>
          <a href="<?php echo esc_url( $category_link ); ?>" title="Category Name">
          <?php        
        $strarr = explode(',',$output);
        foreach($strarr as $string) { 
         echo $string .'</a>';
         }
         }
    
       } ?> 
    

    【讨论】:

    • 不只是“纠正”错误的代码,Kyle 解释什么是错误的、为什么是错误的以及他如何自己纠正它可能是有用的;)
    • 我注意到你提供的代码的唯一一件事是你已经嵌套了foreach。我试过这个,没有用,也没有提供我在问题中所说的正确输出。不过感谢您的努力:)
    猜你喜欢
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多