You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在WordPress后台子菜单中按自定义字段展示特定文章

在WordPress后台添加带特定自定义字段的文章列表子菜单

我来一步步教你实现这个需求,核心其实就两个部分:注册后台独立子菜单,以及在菜单页面里查询并展示符合条件的文章。

第一步:注册后台子菜单

首先我们要借助WordPress的admin_menu钩子,给仪表盘添加一个专属子菜单(如果你想把它挂在「文章」这类主菜单下也可以,这里按你要求的仪表盘独立子菜单来做)。

把下面这段代码加到你的主题functions.php里,或者自定义插件文件中:

add_action('admin_menu', 'add_custom_pending_articles_menu');
function add_custom_pending_articles_menu() {
    // 添加仪表盘子菜单,参数依次是:父菜单slug、菜单显示标题、页面标题、访问权限、菜单唯一标识、页面渲染回调
    add_dashboard_page(
        '待审核编辑文章', // 页面顶部显示的标题
        '待审核编辑',   // 仪表盘菜单里显示的名称
        'edit_posts',   // 访问权限(设置成能编辑文章的用户即可)
        'pending-edited-articles', // 菜单的唯一slug,别和其他菜单重复
        'render_pending_articles_page' // 负责渲染页面内容的函数
    );
}

第二步:编写页面渲染函数,查询并展示目标文章

接下来要实现上面提到的render_pending_articles_page函数——它的作用就是查询带有edited_pending_done自定义字段的文章,然后用和后台默认文章列表风格一致的表格展示出来,用户看着也习惯。

继续添加这段代码:

function render_pending_articles_page() {
    // 先做权限校验,防止未授权用户直接访问
    if (!current_user_can('edit_posts')) {
        wp_die(__('你没有权限访问此页面。'));
    }

    // 构建WP_Query查询参数,精准定位目标文章
    $args = array(
        'post_type' => 'post', // 要查询的文章类型,默认是post,自定义文章类型可以改这里
        'post_status' => 'any', // 可选publish/draft等状态,这里设为any表示所有状态都包含
        'meta_key' => 'edited_pending_done', // 指定要匹配的自定义字段key
        'meta_compare' => 'EXISTS', // 只要存在这个字段的文章都显示,如果要匹配特定值可以用'='+meta_value
        'posts_per_page' => -1, // 显示所有符合条件的文章,也可以设为固定数字比如10
        'orderby' => 'date', // 按发布日期排序
        'order' => 'DESC'
    );

    $pending_articles = new WP_Query($args);

    // 页面头部结构
    echo '<div class="wrap">';
    echo '<h1>' . get_admin_page_title() . '</h1>';

    // 如果查询到文章,就渲染表格
    if ($pending_articles->have_posts()) {
        ?>
        <table class="wp-list-table widefat fixed striped posts">
            <thead>
                <tr>
                    <th>文章标题</th>
                    <th>发布日期</th>
                    <th>自定义字段值</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <?php while ($pending_articles->have_posts()) : $pending_articles->the_post(); ?>
                    <tr>
                        <td>
                            <strong><a href="<?php echo get_edit_post_link(); ?>" target="_blank"><?php the_title(); ?></a></strong>
                            <div class="row-actions">
                                <span class="view"><a href="<?php echo get_permalink(); ?>" target="_blank">查看</a> | </span>
                                <span class="edit"><a href="<?php echo get_edit_post_link(); ?>">编辑</a></span>
                            </div>
                        </td>
                        <td><?php echo get_the_date(); ?></td>
                        <td><?php echo get_post_meta(get_the_ID(), 'edited_pending_done', true); ?></td>
                        <td>
                            <a href="<?php echo get_edit_post_link(); ?>" class="button button-primary">编辑文章</a>
                        </td>
                    </tr>
                <?php endwhile; ?>
            </tbody>
        </table>
        <?php
    } else {
        // 没有符合条件的文章时显示提示
        echo '<p>暂无带有"edited_pending_done"字段的文章。</p>';
    }

    // 重置查询,避免影响后续全局查询
    wp_reset_postdata();

    echo '</div>';
}

第三步:按需自定义调整(可选)

  • 如果你只想展示edited_pending_done字段值为特定内容的文章(比如值为yes),可以修改$args参数:
    $args = array(
        // ...其他参数不变
        'meta_key' => 'edited_pending_done',
        'meta_value' => 'yes',
        'meta_compare' => '='
    );
    
  • 要是想把这个子菜单挂在「文章」主菜单下,把add_dashboard_page换成add_submenu_page,参数调整成这样:
    add_submenu_page(
        'edit.php', // 父菜单slug(文章主菜单的slug是edit.php)
        '待审核编辑文章',
        '待审核编辑',
        'edit_posts',
        'pending-edited-articles',
        'render_pending_articles_page'
    );
    
  • 还可以根据需求增加表格列,比如文章作者、分类标签等,只需要在<thead>和<tbody>里添加对应的<th>和<td>就行。

完成这些操作后,你就能在WordPress后台仪表盘看到「待审核编辑」的子菜单,点击进去就是所有带有edited_pending_done自定义字段的文章列表了。

内容的提问来源于stack exchange,提问作者Peyman Naeimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:10:52