Según los comentarios, $products
fue inicializado por un archivo incluido que se incluyó dentro de una función. Eso define su alcance a la función, en lugar de globalmente. Por lo tanto, deberá usar global $products;
antes de llamar al 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...
}
En cualquier caso, me parece un poco más legible usar $GLOBALS['products']
en lugar del global
palabra clave. Y como siempre, siempre que sea posible, es una práctica preferida pasar la variable a una función en lugar de acceder a ella globalmente.
// If you can, do it this way
function foo($bar, $products) {
// $products was a param, and so global is unnecessary
}
Sin embargo, en su caso, si el CMS lo define, puede perder la flexibilidad para hacerlo de esa manera...