So, I am using this to get the URL:

<a href="/category/<?php foreach((get_the_category()) as $category) { echo $category->cat_name . ' '; } ?>">

Which is outputting:


instead of:


How can I make it do the latter?

Much thanks.

  • Accept the answer that worked for you. :)
    – Shreyo Gi
    Commented Jan 28, 2015 at 6:25

3 Answers 3


Try this

<a href="/category/<?php foreach((get_the_category()) as $category) { echo $category->slug . ' '; } ?>">

Hope this helps.

  • Beaten me by seconds :-). This is correct +1 Commented Jan 28, 2015 at 5:54
  • :) It happens @PieterGoosen. Anyways, thumbs up for your code!
    – Shreyo Gi
    Commented Jan 28, 2015 at 5:56
  • This seems to be the closest I've got! Now it is outputting the text like this: random-category (instead of Random Category). Using it like this: <a href="/category/<?php foreach((get_the_category()) as $category) { echo $category->slug . ' '; } ?>"><?php foreach((get_the_category()) as $category) { echo $category->slug . ' '; } ?></a>
    – lorenzium
    Commented Jan 28, 2015 at 6:33
  • @lorenzium let me get clarified. You want something like the below? <a href="/category/random-category">Random Category</a> or <a href="/category/Random Category">Random Category</a>
    – Shreyo Gi
    Commented Jan 28, 2015 at 6:39
  • @ShreyoGi - yes, the first option: <a href="/category/random-category">Random Category</a>
    – lorenzium
    Commented Jan 28, 2015 at 9:23

I think it will be easier to make use of the category slug, and not the name. It is already in lowercase and hyphen separated if you have more that one word.

The problem with using the name and adding hyphens is that you will not get a match and most probably just 404. %20 is how blank spaces is encoded in a URL.

You can just replace $category->cat_name with $category->slug

Just for interest sake, if you have to use the name and replace blank spaces with a hyphen, you can use str_replace()

$hyphened_name = str_replace( ' ', '-', $category->cat_name );

Change this: echo $category->cat_name

To this: echo $category->cat_slug

A better way would probably be to use:

$cat = get_the_category();
$cat_link = get_term_link( $cat );

That will have $cat_link as the full permalink.

echo '<a href="' . $cat_link . '">' . $cat->cat_name . '</a>';

Using your code above:

<a href="<?php
    $cat = get_the_category();
    echo get_term_link( $cat );

Personally, I try to avoid intermixing things like that as it gets to be a pain to read, but the above should replace what you have.

Better would be

   $cat = get_the_category();
   $cat_link = get_term_link( $cat );

   echo <<<HTML
<a href="{$cat_link}">{$cat->cat_name}</a>


That would also replace what you wrote.

  • Thanks for the answer but I can't seem to get it to work. It is outputting the name but not the link. How would I use this to replace my code above?
    – lorenzium
    Commented Jan 28, 2015 at 1:51
  • I added two optional replacements to what you wrote.
    – Privateer
    Commented Jan 28, 2015 at 2:13
  • None of these worked I'm afraid.
    – lorenzium
    Commented Jan 28, 2015 at 10:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.