阻止WordPress缩写-Long-Slugs...-在管理中

时间:2012-01-27 作者:supertrue

在编辑后的页面上,当一个slug超过一定数量的字符时,Wordpress会用省略号将其删减(...). 例如,如果我的子弹是i-want-to-be-able-to-see-this-slug, 在编辑页面上显示如下:

Permalink: http://example.com/2012/i-want-to-be-a...-see-this-slug/ [编辑]

我可以阻止Wordpress这样做吗?

我希望能够看到(并复制)完整的URL而不被混淆,所以我非常想知道如何摆脱这个特性。

3 个回复
最合适的回答,由SO网友:fuxia 整理而成

函数末尾有一个过滤器:\'get_sample_permalink_html\'. 勾入此项,只需将缩写形式替换为全长。

<?php # -*- coding: utf-8 -*-
/* Plugin Name: T5 Unabridge Permalink Slug */

add_filter( \'get_sample_permalink_html\', \'t5_unabridge_sample_permalink\', 10, 2 );

/**
 * Replaces the shortened permalink with its full form.
 *
 * @param  string $sample Permalink HTML
 * @param  int    $id Post ID
 * @return string
 */
function t5_unabridge_sample_permalink( $sample, $id )
{
    $link = get_sample_permalink( $id );
    $s1   = \'<span id="editable-post-name" \';
    $s2   = \'</span>\';

    return preg_replace(
        \'~\' . $s1 . \'([^>]*)>([^<]*)\' . $s2 . \'~Ui\',
        $s1 . \'$1>\' . $link[1] . $s2,
        $sample
    );
}
结果帖子标题:这是一个相当长的帖子标题。WordPress默认情况下会缩短它,但我们的优秀插件阻止了这一点

enter image description here

Download from GitHub.

SO网友:bueltge

这不可能通过过滤器或行动挂钩实现。WordPress将字符串的核心部分切得很硬。看见wp-admin/includes/post.php 线1110 在WP 3.4 alpha中。

if ( function_exists(\'mb_strlen\') ) {
    if ( mb_strlen($post_name) > 30 ) {
        $post_name_abridged = mb_substr($post_name, 0, 14). \'&hellip;\' . mb_substr($post_name, -14);
    } else {
        $post_name_abridged = $post_name;
    }
} else {
    if ( strlen($post_name) > 30 ) {
        $post_name_abridged = substr($post_name, 0, 14). \'&hellip;\' . substr($post_name, -14);
    } else {
        $post_name_abridged = $post_name;
    }
}
您可以在Trac of WordPress 用于包含筛选器。

SO网友:supertrue

正如@bueltge在他的回答中所指出的,目前还没有允许这种情况的过滤器或动作挂钩。这是我用来阻止的黑客行为... 缩写

在文件中wp-admin/includes/post.php, 找到这一行(在Wordpress 3.4.1中,是第1117行):

$post_name_html = \'<span id="editable-post-name" title="\' . $title . \'">\' . $post_name_abridged . \'</span>\';
将其更改为:

// Changed $post_name_abridged to $post_name to prevent "..." abridgement of long slugs
$post_name_html = \'<span id="editable-post-name" title="\' . $title . \'">\' . $post_name . \'</span>\';
当然,因为这会编辑核心文件,所以每当Wordpress的新版本更新此文件时,更改都会被覆盖。

如果有人能推荐一种非核心黑客方法来实现这一点,我当然会使用它。

结束

相关推荐

paginate posts on admin page

我创建了一个插件,可以调用帖子列表并获取外部API数据。我正在使用get\\u posts获取列表(因为我需要将链接数组提供给API查询)无论出于何种原因,分页的任何尝试要么完全失败,要么加载相同的帖子。由于我所做的一切都不起作用,所以现在我删除了所有分页。add_action(\'admin_menu\' , \'blgs_dashboard_snap\'); function blgs_dashboard_snap() { add_dashboard_pa