Você precisa fazer alterações no código para list.php com base na entrada que obtém através do 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
}
Isso é para torná-lo ainda mais orientado a banco de dados (útil quando há muitas categorias):
$sql = "select * from categories where id = '".$_GET['id']."'";
if (mysql_results($sql)){
// do something
}
else {
// show error
}
Observe que isso é apenas para demonstração e em seu código você deve usar PDO/MySQLI e instruções preparadas e não a função mysql_results.
À luz de mais informações fornecidas pelo OP:Alterar isso
$articles = $article->fetch_all();
para
$articles = $article->fetch_data($_GET['id']);
em list.php e veja se obtém resultados corretos.