De acordo com os comentários,
$products
foi inicializado por um arquivo incluído que foi incluído dentro de uma função. Isso define seu escopo para a função, em vez de globalmente. Portanto, você precisará usar global $products;
antes de chamar o include. function func_that_defined_products() {
global $products;
include('file_that_defines_products.php');
}
// Now when called globally later, it will be at the correct scope.
function foo($bar)
{
global $products;
$query = 'SELECT p_name FROM 0_products WHERE p_category IN (' . $bar . ')';
// etc...
}
De qualquer forma, acho um pouco mais legível usar
$GLOBALS['products']
em vez do global
palavra-chave. E, como sempre, sempre que possível, é uma prática preferida passar a variável para uma função em vez de acessá-la globalmente. // If you can, do it this way
function foo($bar, $products) {
// $products was a param, and so global is unnecessary
}
No entanto, no seu caso, se o CMS definir, você pode perder a flexibilidade de fazer dessa maneira...