• Hi, I was able to allow the user to select from 2 categories and wordpress would display all the posts matching these categories. Only the posts in both categories are displayed.

    On the post page, I want to display the title of the two categories selected before the list of posts – some what like “Here are archives to XXX and YYY categories”. I can display the 1st category title but not the second selected category title.

    The input string goes something like this https://website/?cat=3&cat=12. If a search string is supplied, it goes like this https://website/?cat=3&cat=12&s=searchtext

    Anyone please help.

Viewing 4 replies - 1 through 4 (of 4 total)
  • Thread Starter leeyha

    (@leeyha)

    Think I wasn’t clear on the help required. The help question is: How can I display the title of the two categories selected on the post page?

    I’m not sure the issue here is one of clarity rather than difficulty.

    First thing, as far as I know using:

    https://website/?cat=3&cat=12

    will not work. The second cat value overrides the first in your GET array. WordPress however will parse:

    https://website/?cat=3,12

    as a query for posts in categories 3 and 12. With that, to display the categories we can do something like:

    <?php
    global $wp_query;
    if( $wp_query->query_vars['cat'] ) :
    $cats = explode(',', $wp_query->query_vars['cat']);
    foreach ($cats as $catid) :
    $category = get_the_category_by_id($catid);
    echo $category . ' ';
    endforeach;
    endif;
    ?>

    Thread Starter leeyha

    (@leeyha)

    Hi, thanks for this. It comes close to what I wanted & found my solution from this hint you provide.

    Thanks Very Much & Merry Xmas.

    Here is my solution.

    The string that I am passing is actually:
    https://website/?s=&cat=3&cat=12

    Here is my code:
    $cats = explode(‘=’, $_SERVER[‘QUERY_STRING’]);
    echo $_SERVER[‘QUERY_STRING’]. ‘ is server query | ‘;
    echo count($cats). ‘ is count | ‘;
    echo $cats[0]. ‘ is 0 | ‘;
    echo $cats[1]. ‘ is 1 | ‘;
    echo $cats[2]. ‘ is 2 | ‘;
    echo $cats[3]. ‘ is 3 | ‘;
    if (count($cats) > 2) :
    echo get_the_category_by_id($cats[2]). ‘ and ‘. get_the_category_by_id($cats[3]). ‘ categories.’;
    else :
    echo get_the_category_by_id($cats[1]). ‘ category.’;
    endif;
    ?>

    Here is my output:
    s=&cat=3&cat=12 is server query | 4 is count | s is 0 | &cat is 1 | 3&cat is 2 | 12 is 3 | All Learning Providers and All Locations categories.

    I know it is not ‘neat’ to pass a string like ‘3&cat’ to get_the_category_by_id() function, but this this case, WordPress is smart enough to pick up the cat_id. I am really pleasantly surprised by this.

    Thanks Again.

    People, don’t forget to sanitize your user input. Many of the functions you use are not designed to take input from “outside”. At least you should run a mysql_real_escape_string() on the input variables before inserting them into any internal WordPress function. You don’t want your WP database poisoned (and maybe welcome some new admin members), do you?

Viewing 4 replies - 1 through 4 (of 4 total)
  • The topic ‘Dislaying Title of Two Category After Search’ is closed to new replies.