Debe realizar cambios en el código de list.php en función de la entrada que recibe a través del parámetro GET. algo como:
if ($_GET['id'] == 'FREE'){
// do something like display FREE items
}
elseif($_GET['id'] == 'GIFT') {
// display GIFT items
}
else {
// perform some default action
}
Esto es para hacerlo aún más basado en la base de datos (útil cuando hay muchas categorías):
$sql = "select * from categories where id = '".$_GET['id']."'";
if (mysql_results($sql)){
// do something
}
else {
// show error
}
Tenga en cuenta que esto es solo para demostración y en su código debe usar PDO/MySQLI y declaraciones preparadas y no la función mysql_results.
A la luz de más información proporcionada por OP:Cambiar esto
$articles = $article->fetch_all();
a
$articles = $article->fetch_data($_GET['id']);
en list.php y mira si obtienes los resultados correctos.