Fred, here is the solution I was noting:
function is_type( $var ) {
static $arr;
if (!$arr) {
global $url, $categorySEF, $_catID, $_XNAME, $_ID, $_POS;
$arr = array();
// Prep for admin pages
$catList = explode(',', l('cat_listSEF'));
// Add missing admin pages
$catList[] = 'process';
$catList[] = 'editcomment';
if ( $url || isset($_GET['action']) ) {
// Article
if ( $url[2] && $_ID && $_POS == 1 ) {
$arr['article'] = true;
unset( $url[1], $url[0] );
} elseif ( $url[1] && $_ID && $_POS == 1 ) {
$arr['article'] = true;
unset( $url[0] );
}
// Subcategory
if( $url[1] && $_catID && $_XNAME ) {
$arr['subcategory'] = true;
}
// Category
if( $url[0] && $_catID ) {
$arr['category'] = true;
}
// Page
if( $url[0] && $_ID && $_POS == 3 ) {
$arr['page'] = true;
}
if( in_array($url[0], array($catList[0], $catList[1], $catList[2])) ) {
$arr['page'] = true;
}
// Admin
unset( $catList[0], $catList[1], $catList[2] );
if( in_array($categorySEF, $catList) || in_array($_GET['action'], $catList) ) {
$arr['admin'] = true;
}
// 404
if ($categorySEF == '404') {
$arr['404'] = true;
}
}
// Home Page or Page set as Home
if ( empty($arr) ) {
$arr['home'] = true;
}
}
if( isset($arr[$var]) ) {
return true;
}
}
Then some wrapper functions:
function is_home() {
return is_type('home');
}
function is_page() {
return is_type('page');
}
function is_category() {
return is_type('category');
}
function is_article() {
return is_type('article');
}
function is_admin() {
return is_type('admin');
}
function is_404() {
return is_type('404');
}
Test code:
if( is_home() ) {
echo 'Welcome!';
}
if( is_admin() ) {
echo 'Welcome Admin!';
}