2013-08-27 55 views
-2

我试图根据我拥有的类别数创建一个URL。预期的输出我想要的是:带变量的两个foreach语句

<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>'; 
     } 

     } ?> 

回答

4

像这样的事情要简单得多应该完全足够了:

$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)); 
} 

你只需要循环在您的类别上,每个类别输出一个链接。而已。

+0

哇,这是一个该死的罚款答案。然而,我对此有唯一的质疑,那就是如何在每个链接之间放置一个'/'而不是最后一个链接。有点像“舞蹈/时尚/音乐”? – UzumakiDev

+0

不是直接输出,而是将每个链接放入一个数组中:'$ links [] = sprintf(...)',然后在循环之后使它们爆炸:'echo implode('/',$ links)'。 – deceze

+0

感谢您向我介绍htmlspecialchars我将在未来保持这一点:) – UzumakiDev

0

试试这个:

<?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>'; 
    } 
    } 

    } ?> 
+1

而不只是“纠正”错误代码凯尔解释什么是错了,它可能是有用的,这是为什么它错了,他怎么可以自己纠正它) – dognose

+0

我注意到的代码哟所提供的唯一的事情就是你嵌套了foreach。我试过这个,没有工作,也没有提供我在问题中提到的正确输出。谢谢你的努力:) – UzumakiDev

1

你自己复杂的,我纠正你的代码

<?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

+0

这个作品,谢谢我知道我在做一些愚蠢的事情。现在我被宠坏了,你的选择更加类似于我正在寻找的答案和方法,但下面的答案之一是在一半的线上。 – UzumakiDev

+1

是的,我知道,只是想尊重你的代码逻辑。 ^^ – 2013-08-27 11:50:30