# Category List with custom urls

How do i get the list of categories as wp_list_categories does but using get_categories and then displaying the links in a foreach loop. The reason is i want the links to point to the current page with [?search-type=normal&s=cat_name; ] instead on pointing to the category url.

This will then filter the results when clicked on the same page.

<?php

$categories = get_categories(array('hide_empty' => 0, depth => 0, 'hierarchical' => false)); echo '<ul>'; foreach($categories as $category) { echo '<li><a href="?search-type=normal&s='.$category->term_id.'">'.$category->name.'</a></li>';$sub_categories = get_categories(array('hide_empty' => 0, 'parent' => $category->term_id, 'hierarchical' => true)); if(!$sub_categories) {

} else {

foreach ($sub_categories as$sub_category) {

echo '<ul>';
echo '<li><a href="?search-type=normal&s='.$sub_category->term_id.'">'.$sub_category->name.'</a></li>';
echo '</ul>';
}
}

}

echo '</ul>';
?>

-

get_categories() is handy function to get list of categories with all information such as id & name of each category etc.

This code might work. The $category->term_id will return the unique id for each category and $category->name will return the name to display to user.

<?php
$args=array( 'orderby' => 'name', 'order' => 'ASC' );$categories=get_categories($args); foreach($categories as $category) { echo '<a href="?search-type=normal&s='.$category->term_id.'">'.$category->name.'</a>'; } ?>  ## Update - Here is code which uses custom Wordpress walker class to edit the links. Put this into your themes functions.php  //usage wp_list_categories( array('walker' => new wpse_59862_walker() ) ) class wpse_59862_walker extends Walker_Category { // copied function from /inlcude/category-template.php and edited as per requirements function start_el( &$output, $category,$depth = 0, $args = array(),$id = 0 ) {
extract($args);$cat_name = esc_attr( $category->name );$cat_name = apply_filters( 'list_cats', $cat_name,$category );
$my_blog_link = site_url('/'); //this is to return blog url //here I edited the link to meet your requirments.$link = '<a href="'.$my_blog_link.'?search-type=normal&s='.$category->term_id.'" ';

if ( $use_desc_for_title == 0 || empty($category->description) )
$link .= 'title="' . esc_attr( sprintf(__( 'View all posts filed under %s' ),$cat_name) ) . '"';
else
$link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description',$category->description, $category ) ) ) . '"';$link .= '>';
$link .=$cat_name . '</a>';

if ( !empty($feed_image) || !empty($feed) ) {
$link .= ' '; if ( empty($feed_image) )
$link .= '(';$link .= '<a href="' . esc_url( get_term_feed_link( $category->term_id,$category->taxonomy, $feed_type ) ) . '"'; if ( empty($feed) ) {
$alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s' ),$cat_name ) . '"';
} else {
$title = ' title="' .$feed . '"';
$alt = ' alt="' .$feed . '"';
$name =$feed;
$link .=$title;
}

$link .= '>'; if ( empty($feed_image) )
$link .=$name;
else
$link .= "<img src='$feed_image'$alt$title" . ' />';

$link .= '</a>'; if ( empty($feed_image) )
$link .= ')'; } if ( !empty($show_count) )
$link .= ' (' . intval($category->count) . ')';

if ( 'list' == $args['style'] ) {$output .= "\t<li";
$class = 'cat-item cat-item-' .$category->term_id;
if ( !empty($current_category) ) {$_current_category = get_term( $current_category,$category->taxonomy );
if ( $category->term_id ==$current_category )
$class .= ' current-cat'; elseif ($category->term_id == $_current_category->parent )$class .=  ' current-cat-parent';
}
$output .= ' class="' .$class . '"';
$output .= ">$link\n";
} else {
$output .= "\t$link<br />\n";
}
}

}

-
Thanks for your answer @amit, however, would like to be able to display the parent and child relationship aswell. I can display all categories fine as <li> but i want to add <li>Parent<ul><li>Child</li></ul></li> –  Loxzibit Jul 27 '12 at 13:31
is the code you are updated in question is working or not ? –  amit Jul 28 '12 at 19:38
hey, I'd use wp_list_categories() instead using get_categories() to list categories and use a action hook to replace the url. that'd be lot easier. –  amit Jul 28 '12 at 19:57
Ok, thnaks @amit for your assistance, if you could show me how i would write the action hook to replace the url, i would so much appreciate it. I'm still new to Wordpress and 'm still getting my head around filters,hooks, add_action and so forth. –  Loxzibit Jul 30 '12 at 9:41
updated answer with new code which uses wordpress walker class to edit the links –  amit Jul 30 '12 at 17:01