这个是我网站最新更新文章代码如何在文章前面加入栏目的名称的

  1. AutoCMS
  2. /
  3. 建站资讯
  4. /
  5. 网站
logo
苏彬彩

网站  2026-10-27 02:00:02   523

这个是我网站最新更新文章代码如何在文章前面加入栏目的名称的

最新文章列表里想让标题前面带栏目名,不用动文章标题本身,改模板输出那一段最稳。很多网站的文章表里存的是category_id,栏目表里存id和name,最新文章查询时把栏目名一起取出来,循环里先输出栏目名再输出标题就行。这样后台编辑文章还是原来的标题,前台展示多一个栏目前缀,搜索、SEO标题、编辑习惯都不受影响。

先看数据怎么来。假设文章表articles有id、title、category_id、status、updated_at,栏目表categories有id、name。最新文章查询用LEFT JOIN,一次把栏目名带出来:

```php
  $sql = "SELECT a.id, a.title, a.category_id, c.name AS category_name
   FROM articles a
   LEFT JOIN categories c ON c.id = a.category_id
   WHERE a.status = 1
   ORDER BY a.updated_at DESC
   LIMIT 10";
  $rows = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);

foreach ($rows as $row) {
   $catName = $row[''category_name''] ?: ''未分类'';
   echo ''

'';
   echo '''' . htmlspecialchars($catName, ENT_QUOTES, ''UTF-8'') . '''';
   echo '''' . htmlspecialchars($row[''title''], ENT_QUOTES, ''UTF-8'') . '''';
   echo ''
'';
  }
  ```

这段代码的关键是`$catName`在标题链接前面输出。栏目名最好做HTML转义,标题也要转义,文章id强制转整数。如果栏目名要能点进栏目页,把span换成a,链接带上category_id:

```php
  $catUrl = ''/category.php?id='' . (int)$row[''category_id''];
  echo '''' . htmlspecialchars($catName, ENT_QUOTES, ''UTF-8'') . '''';
  ```

有些老代码不是一次JOIN,而是先查最新文章,再在循环里根据category_id查栏目名。文章少的时候看不出问题,最新文章一多就容易变成循环查库。更稳的做法是先把栏目表读成映射,循环里直接取:

```php
  $cats = [];
  $catRows = $pdo->query("SELECT id, name FROM categories")->fetchAll(PDO::FETCH_ASSOC);
  foreach ($catRows as $c) {
   $cats[$c[''id'']] = $c[''name''];
  }

foreach ($rows as $row) {
   $catName = $cats[$row[''category_id'']] ?? ''未分类'';
   echo '''' . htmlspecialchars($catName, ENT_QUOTES, ''UTF-8'') . '''';
   echo '''' . htmlspecialchars($row[''title''], ENT_QUOTES, ''UTF-8'') . '''';
  }
  ```

WordPress站点更简单,最新文章循环里用get_the_category取分类,取第一个分类名放在the_title前面:

```php
  $cats = get_the_category();
  $catName = !empty($cats) ? $cats[0]->name : ''未分类'';
  $catLink = !empty($cats) ? get_category_link($cats[0]->term_id) : ''#'';

echo '''' . esc_html($catName) . '''';
  the_title(''

'', ''

'');
  ```

如果是在文章详情页正文开头加栏目名,不要改文章内容字段,在single模板里输出就行:

```php
  $cats = get_the_category();
  if (!empty($cats)) {
   echo ''

'' . esc_html($cats[0]->name) . ''
'';
  }
  ```

样式上给栏目名一点区分,读者一眼能看出这是栏目不是标题的一部分:

```css
  .cat-name {
   display: inline-block;
   margin-right: 8px;
   padding: 2px 6px;
   background: #f2f2f2;
   color: #666;
   font-size: 13px;
   border-radius: 3px;
   text-decoration: none;
  }
  .article-item {
   line-height: 1.8;
  }
  ```

几个容易踩的坑。文章没有分类时要给默认值,不然标题前面空一块或者报错。一篇文章绑了多个栏目时,最新文章列表最好只取主栏目,别把一串栏目名都堆在标题前。栏目名输出前要转义,后台栏目名里带引号或尖括号也不会把页面结构弄乱。栏目名做成链接对SEO更友好,但链接地址要用category_id生成,别直接拿栏目名拼URL。还有,别为了省事把栏目名直接写进文章title字段,短期看着能用,后面改栏目、做搜索、导出数据都会乱。

找到你网站输出最新文章的那个模板,常见是index.php、sidebar.php或者latest-posts.php,搜`the_title`或者`$row[''title'']`,在它前面加栏目名输出,基本就改完了。