WordPress模板插件定制

您现在的位置是:首页 > WordPress教程WordPress教程

WordPress置顶文章搞不定?手把手教你从入门到“玩明白”!

查看 WP集市 的更多文章WP集市 2025-08-21 【WordPress教程】 903人已围观

说实话,WordPress的置顶文章功能,看着简单,真上手了就容易懵圈——要么置顶了找不到在哪儿改,要么想放俩置顶文章结果顺序乱糟糟,更别说自定义排序了。今天咱就掰开揉碎了说,从基础操作到进阶玩法,保证你看完就能上手,以后置顶文章想咋整咋整!

先唠5毛钱的:默认置顶咋玩?(新手必看)

其实WordPress自带置顶功能,就是藏得有点“反人类”。你新建或编辑文章时,拉到右边“发布”模块,往下瞅,有个“ visibility”(可见性),点一下,里面藏着个“置顶于首页”的勾选框——对,就它!勾上,更新文章,首页就会把这篇文章顶到最前面,标题旁边还会多个“置顶”标签,一眼就能认出来。

但问题来了:默认置顶有俩坑。一是只能置顶一篇,想同时置顶“本周热点”和“新人必读”?没门儿!二是顺序死的,置顶了就固定在最上面,想让“新人必读”排“本周热点”前面?默认功能办不到。这时候就得整点“进阶操作”了。

进阶玩法1:多文章置顶,还能自定义顺序!

想同时置顶多篇文章,还能自己排先后?别慌,不用装插件,几行代码就能搞定。核心思路是:给文章加个“置顶权重”(就当是给文章贴个“插队号码牌”),权重越大排越前,然后让WordPress按这个权重显示置顶文章。

第一步:给文章加个“权重值”

先得让编辑文章时能填这个“权重”。打开你主题的functions.php(别直接改!先复制一份备份,改崩了好恢复,听我的!),贴这段代码:

// 给文章加个置顶权重字段
function add_pin_weight_meta_box() {
  add_meta_box(
    'pin_weight_box', // 框框ID
    '置顶权重(数字越大越靠前)', // 框框标题
    'show_pin_weight_meta_box', // 显示内容的函数
    'post', // 只在文章类型显示
    'side', // 放右边栏
    'high' // 优先级高点,显眼
  );
}
add_action('add_meta_boxes', 'add_pin_weight_meta_box');

// 显示权重输入框
function show_pin_weight_meta_box($post) {
  $pin_weight = get_post_meta($post->ID, 'pin_weight', true);
  // 没填过就默认0,填过就显示之前的数
  echo '<input type="number" name="pin_weight" value="'.esc_attr($pin_weight ? $pin_weight : 0).'" style="width:100%;">';
}

// 保存权重值
function save_pin_weight_meta_box($post_id) {
  if (isset($_POST['pin_weight'])) {
    update_post_meta($post_id, 'pin_weight', absint($_POST['pin_weight'])); // 确保是正整数
  }
}
add_action('save_post', 'save_pin_weight_meta_box');

保存一下,再去编辑文章,右边栏就会多一个“置顶权重”输入框——想让哪篇文章排前面,就给它填个大数字(比如100),次要的填小点(比如50),不置顶的就留0。

第二步:让WordPress按“权重”显示置顶文章

光填了权重还不行,得告诉WordPress“按这个数排序”。继续在functions.php里加代码(还是那句话,先备份!):

// 改首页查询,让置顶文章按权重排序
function custom_pin_posts_order($query) {
  if ($query->is_home() && $query->is_main_query() && !is_admin()) {
    // 先查带权重的置顶文章
    $query->set('meta_key', 'pin_weight');
    $query->set('orderby', 'meta_value_num'); // 按数字排序
    $query->set('order', 'DESC'); // 从大到小排
    // 顺便把权重>0的都算“置顶”,不管默认的置顶勾选
    $query->set('meta_query', array(
      array(
        'key' => 'pin_weight',
        'value' => 0,
        'compare' => '>'
      )
    ));
  }
}
add_action('pre_get_posts', 'custom_pin_posts_order');

这段代码是啥意思?说白了就是告诉WordPress:“首页文章别瞎排,先看有没有‘pin_weight’这个数,有的话按数从大到小排,数越大越往前放,没这个数的(或者数是0的)就往后稍稍。”

踩坑提醒:这些细节别忽略!

  1. 权重值别乱填:比如你想置顶3篇,权重填10、20、30就行,别填10000这种夸张数,后面想加新置顶文章还得算半天;
  2. 别和默认置顶混用:用了上面的代码,就别勾默认的“置顶于首页”了,容易冲突;
  3. 主题兼容问题:有些主题自己改了首页查询,可能会让这段代码失效。这时候别慌,把代码里的is_home()改成is_front_page()试试(首页是静态页就用这个)。

最后说句大实话

学会这几招,置顶文章想置顶几篇就置顶几篇,想让哪篇排前面就哪篇排前面,再也不用依赖插件了(插件虽方便,但多一个插件多一份加载压力不是?)。嫌代码麻烦?先从手动改functions.php开始练手,改两次就熟了——编程这事儿,光看不动手,永远是“会看不会做”。

赶紧打开你网站后台试试,搞不定的话……评论区喊我,我教你(前提是你先备份了functions.php啊!)!

Tags:

WordPress模板插件定制