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

WordPress编辑器与后台文章列表能否显示slug而非标题?

嘿,这两个问题都挺贴合实际需求的,我来给你一步步拆解解决方案,都是用代码实现(不用额外装插件,更稳定):

问题1:在WordPress编辑器中显示slug而非文章标题?

WordPress默认编辑器不管是古腾堡还是经典版,都不会直接让你替换标题显示为slug,但我们可以通过自定义代码实现:

如果你用的是经典编辑器

把这段代码添加到主题的functions.php文件,或者用「Code Snippets」这类自定义代码插件(更推荐后者,避免主题更新丢失代码):

add_action('admin_head-post.php', 'show_slug_instead_title_classic');
add_action('admin_head-post-new.php', 'show_slug_instead_title_classic');

function show_slug_instead_title_classic() {
    global $post;
    if (!$post) return;
    $slug = $post->post_name;
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            // 隐藏标题输入框的默认提示文字
            $('#title-prompt-text').hide();
            // 如果文章已有slug,把标题输入框的值替换为slug并设置为只读
            if ('<?php echo esc_js($slug); ?>' !== '') {
                $('#title').val('<?php echo esc_js($slug); ?>').attr('readonly', true);
            }
        });
    </script>
    <?php
}

这段代码会把经典编辑器里的标题输入框替换成当前文章的slug,并且锁定输入(如果是已发布的文章),新文章的话可以先设置slug再保存,保存后输入框就会显示slug了。

如果你用的是古腾堡(区块)编辑器

用这段代码替换标题区块的显示内容为slug:

add_filter('register_block_type_args', 'replace_title_block_with_slug', 10, 2);

function replace_title_block_with_slug($args, $block_name) {
    if ($block_name === 'core/post-title') {
        $args['render_callback'] = function($attributes) {
            global $post;
            $slug = $post->post_name;
            // 保留标题区块的样式,只是把内容换成slug
            return '<h1 class="wp-block-post-title">' . esc_html($slug) . '</h1>';
        };
    }
    return $args;
}

这样编辑器里的标题区块就会显示文章slug,而不是标题文字,实际文章的标题字段还是会保留原内容,只是编辑器预览显示slug。

问题2:在后台文章管理列表中显示slug替代标题?

这个需求更常见,直接替换标题列的内容为slug就可以,还能保留原有的编辑、查看等操作功能:

添加这段代码到functions.php或代码插件:

add_filter('manage_posts_columns', 'replace_title_column_with_slug');
add_action('manage_posts_custom_column', 'display_slug_in_title_column', 10, 2);

function replace_title_column_with_slug($columns) {
    // 把原标题列的表头改成「Slug」,也可以保留「标题」字样,看你习惯
    $columns['title'] = 'Slug';
    return $columns;
}

function display_slug_in_title_column($column, $post_id) {
    if ($column === 'title') {
        $post = get_post($post_id);
        $slug = $post->post_name;
        // 保留原标题列的编辑链接
        $edit_link = get_edit_post_link($post_id);
        echo '<a href="' . esc_url($edit_link) . '" class="row-title">' . esc_html($slug) . '</a>';
        // 保留快速编辑、查看等操作菜单
        echo '<div class="row-actions">';
        $actions = array(
            'edit' => '<a href="' . esc_url($edit_link) . '">编辑</a>',
            'view' => '<a href="' . esc_url(get_permalink($post_id)) . '" target="_blank">查看</a>',
            'trash' => '<a href="' . esc_url(get_delete_post_link($post_id)) . '" class="submitdelete">移至回收站</a>'
        );
        echo implode(' | ', $actions);
        echo '</div>';
    }
}

添加后刷新后台文章列表,原本的标题列就会显示每篇文章的slug,再也不用担心相同标题找不到目标文章了。

如果你不想替换原标题列,而是新增一个Slug列再隐藏原标题,也可以用这段代码:

add_filter('manage_posts_columns', 'add_slug_column');
add_action('manage_posts_custom_column', 'display_slug_column', 10, 2);
add_action('admin_head-edit.php', 'hide_default_title_column');

function add_slug_column($columns) {
    $columns['post_slug'] = 'Slug';
    return $columns;
}

function display_slug_column($column, $post_id) {
    if ($column === 'post_slug') {
        echo esc_html(get_post_field('post_name', $post_id));
    }
}

function hide_default_title_column() {
    echo '<style>.column-title { display: none; }</style>';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:37:45