2013-08-27 5 views
-2

J'essaye de créer une URL basée sur le nombre de catégories que j'ai. Le résultat attendu est que je veux:Deux instructions foreach avec variables

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

La sortie je reçois est:

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

Il est presque ce que je veux, mais il est clair que je suis toujours au large par un peu. J'utilise 3 instructions foreach pour obtenir ce résultat. J'ai essayé d'imbriquer un foreach mais cela n'a pas fonctionné. Le problème est d'obtenir les résultats d'une foreach pour passer dans une autre.

Voici le code que je utilise:

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

     } ?> 

Répondre

4

Quelque chose beaucoup plus simple comme cela devrait parfaitement suffire:

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

Vous avez juste besoin de boucle sur vos catégories, en publiant un lien par catégorie. Rien de plus.

+0

wow, c'est une bonne réponse. Le seul problème que j'ai à ce sujet, cependant, est de savoir comment je pourrais placer un '/' entre chaque lien mais pas le dernier lien. Un peu comme "danse/mode/musique"? – UzumakiDev

+0

Au lieu de le sortir directement, placez chaque lien dans un tableau: '$ links [] = sprintf (...)', puis après que la boucle les implose: 'echo implode ('/', $ links)'. – deceze

+0

merci de me présenter à htmlspecialchars Je vais garder cela à l'esprit dans le futur :) – UzumakiDev

0

essayez ceci:

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

au lieu de « corriger » code erroné, il pourrait être utile pour Kyle pour expliquer ce qui ne va pas, pourquoi est il a tort et comment il pourrait le corriger lui-même;) – dognose

+0

La seule chose que j'ai remarqué avec le code que vous avez fourni est que vous avez imbriqué le foreach. J'ai essayé cela, n'a pas fonctionné et il ne fournit pas le bon résultat que j'ai indiqué dans la question. Merci pour l'effort si :) – UzumakiDev

1

Vous vous compliquez, j'ai corrigé votre code

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

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

+0

Cela fonctionne, merci je savais que je faisais quelque chose de stupide. Maintenant, j'ai l'embarras du choix, le vôtre ressemble plus à la réponse et à la méthode que je cherchais mais l'une des réponses ci-dessous le fait dans la moitié des lignes. – UzumakiDev

+1

Oui, je sais, je voulais juste respecter votre logique de code. ^^ –