PHP读取栏目推荐状态需强制类型转换:用(int)$row['is_recommend']===1或== '1'判断,避免字符串'0'被误判为true;PDO默认可能返回字符串,应统一转整型或SQL层CAST。

PHP 怎么读取栏目推荐状态(is_recommend 字段)
大多数 CMS 或自建系统里,栏目表(比如 category)会加一个 is_recommend 字段来标识是否“推荐”或“置顶”。这个字段通常是 TINYINT(1) 或 ENUM('0','1'),值为 1 表示推荐,0 表示不推荐。
直接查数据库即可,不需要额外扩展或插件:
$sql = "SELECT id, name, is_recommend FROM category WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$cat_id]);
$category = $stmt->fetch(PDO::FETCH_ASSOC);
if ($category && (int)$category['is_recommend'] === 1) {
// 当前栏目是推荐/置顶状态
}
- 注意强制转成
(int),避免字符串比较出错(比如'1'和true在 PHP 中松散比较可能误判) - 如果字段名是
is_top、sticky或featured,请按实际字段名替换 - 用 PDO 或 MySQLi 都行,但别用已废弃的
mysql_*函数
ThinkPHP 中怎么判断栏目是否推荐
ThinkPHP 6/7 常用模型方式读取,假设你有 Category 模型,且数据库字段是 is_recommend:
$category = Category::find($id);
if ($category?->is_recommend) {
// 推荐状态生效(注意:TP 默认会把 1 映射为 true,0 为 false)
}
- TP6+ 的模型属性访问是自动类型转换的,
is_recommend字段设为boolean类型时更稳妥(在模型中定义protected $type = ['is_recommend' => 'boolean'];) - 如果没定义类型,且数据库存的是字符串
'1',if ($category->is_recommend)仍为true,但不严谨;建议显式判断== 1或=== true - 别依赖模板里直接写
{$category.is_recommend}就判断——模板层应只负责展示,逻辑判断放控制器或模型里
WordPress 主题里怎么判断分类是否“置顶”
WordPress 原生不提供栏目(分类)级别的“推荐”开关,所谓“置顶”一般指文章置顶(sticky),不是分类本身。如果你需要给分类加推荐标记,得自己加字段:
立即学习“PHP免费学习笔记(深入)”;
- 用
add_term_meta()存一个is_recommended元字段,值为1 - 获取时用
get_term_meta($term_id, 'is_recommended', true),返回'1'或''(空字符串) - 判断写法:
if (get_term_meta($term_id, 'is_recommended', true) === '1') - 别用
get_term_meta(..., ..., false)返回数组,容易漏掉[0]导致判断失败
为什么 var_dump 里显示 is_recommend 是 string(1) "1" 却 if 判断失效
这是典型类型陷阱。PHP 中 '1'(字符串)在 if 里为 true,但 '0' 也是 true(因为非空字符串都为 true),而你期望的是 '0' → false。
- 错误写法:
if ($row['is_recommend'])——'0'也会进分支 - 正确写法:
if ((int)$row['is_recommend'] === 1)或if ($row['is_recommend'] == '1') - 更健壮的做法:统一用整型字段 +
CAST查询,或在 SQL 层就转:SELECT ..., CAST(is_recommend AS SIGNED) AS is_recommend_int - PDO 默认 fetch 出来的数值字段也可能是字符串(取决于驱动和 MySQL 配置),不能默认信任类型
字段设计和类型处理比业务逻辑更容易埋雷,尤其多人协作时,别让“看起来能跑”掩盖了隐性 bug。











