Copying and pasting my answer from http://www.question2answer.org/qa/14058/exclude-category-in-questions-list
This is what I ended up with, in case it helps:
In the qa-theme-base.php file in the qa-include folder, I modified the q_list_items function. Sorry about the formatting, I'm not sure how to format code on a Q2A site. Items in green are what you'll need to customize for your own needs.
function q_list_items($q_items)
{
foreach ($q_items as $q_item){
if($q_item['raw']['categoryid'] != 8) {
$this->q_list_item($q_item);
}
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'],PHP_URL_PATH);
$urlPart= explode('/', $_SERVER['REQUEST_URI_PATH']);
if($urlPart[1]=="enhancement-request")
$this->q_list_item($q_item);
if(array_key_exists(2,$urlPart)){
if($urlPart[2]=="enhancement-request")
$this->q_list_item($q_item);
}
}
}
So here's a quick summary of what's happening:
In the first section, we're telling the query to determine if the category id # is not 8 and if it is NOT 8, then show the question. If it is 8, then don't do anything. You'll need to change this to match the category id that you need. Easiest way to get that id is to go to Admin --> Categories then click on the category name. Because that name is a URL, you'll see the end of the URL ends like "/admin/categories?edit=8". You'll also need the slug, or URL fragment, for the second part of this function.
After that section of code, we do a query of the server to retreive the possible URL segment outcomes. Simply put, a URL segment is what's between the / marks. So with the example www.question2answer.org/questions/category, www.question.org is segment 0, questions is segment 1, and category is segment 2.
And lastly, in order to show those questions when you navigate to the category page either from the home page or from the questions page (so www.question2answer.org/category or www.question2answer.org/questions/category), we need to query the segment of the URL you're currently on. The first query looks for your category slug to be in segment 1, and the second query determines first if a segment 2 exists (to prevent a php notice from appearing on your site) and then if your category slug is in segment 2.
I am very new to php with my experience lying in .NET and objective-c, so if someone thinks this needs improvement, please let me know.