get_category_by_slug()
returns a category object or FALSE
:
$cat1 = get_category_by_slug( 'cata' );
print '<pre>' . htmlspecialchars( print_r( $cat1, TRUE ) ) . '</pre>';
Result:
stdClass Object
(
[term_id] => 3
[name] => Cat A
[slug] => cata
[term_group] => 0
[term_taxonomy_id] => 3
[taxonomy] => category
category__not_in and id values from variable =>
[parent] => 0
[count] => 2
[cat_ID] => 3
[category_count] => 2
[category_description] =>
[cat_name] => Cat A
[category_nicename] => cata
[category_parent] => 0
)
So, to get an array of IDs just check if you get an object for each slug and add the term_id
to the array:
$category__not_in = array();
$slugs = array ( 'cata', 'catdoesnotexist' );
foreach ( $slugs as $slug )
{
$cat = get_category_by_slug( $slug );
$cat and $category__not_in[] = $cat->term_id;
}
$args = array (
'category__not_in' => $category__not_in
);
Instead of hard coding the slugs in your script consider to add term meta data to the categories. You will need an additional query to find all needed terms, but your script stays reusable.