在固定链接中使用下划线而不是连字符

时间:2011-05-11 作者:anu

确保帖子和页面段塞使用下划线而不是连字符的最佳方法是什么,无需手动编辑段塞(或手动更新页面)

当前永久链接:

www.<domain>.com/2011/05/this-is-a-test-post/
所需permalink

www.<domain>.com/2011/05/this_is_a_test_post/
我尝试过的一种方法是sanitize_title, 但这似乎只是在帖子更新时才被调用,所以对于一个有几千篇帖子的博客来说并不太实用。有没有办法强制每个帖子更新?

我需要这个来保持兼容性,因为一个旧的MovableType站点被移动到WordPress中。htaccess不是一个真正的选项

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

IMO使用sanitize\\u标题可能是最好的方式。查看Mark Jaquith的这个插件,它做了类似的事情:http://txfx.net/files/wordpress/periods-in-titles.phps

至于更新旧帖子,我只需要编写一个简单的脚本,生成sql来手动更新所有内容。(代码未测试)

<?php
function sanitize_title_with_underscores( $title ) {
    return str_replace( \'-\', \'_\', sanitize_title_with_dashes( $title ) );
}

$posts = get_posts( array( \'numberposts\' => -1 ) );

foreach ( $posts as $post ) {
    global $wpdb;
    $id = absint( $post->ID );
    $name = sanitize_title_with_underscores( $post->post_name );
    print "\\n" . "UPDATE $wpdb->posts SET post_name = \'{$name}\' WHERE ID = {$id};"
}
?>
可能不是最优雅的解决方案,但对于只需要做一次的事情,它应该可以很好地工作。

SO网友:anu

所以,这就是我最终得到的结果,在转换导入内容的片段后,这被连接到sanitize\\u链接中。最后2条规则是为了保持与所使用的可移动类型permalink方案的兼容性(它处理的不仅仅是连字符)

我相信这不是最有效的,但它可能会帮助别人。

function convert_permalinks( $old_slug ){

global $post;

if (!get_post_type() == "post") {
    return $old_slug;
}

# replace hyphens with underscores
# replace apostrophes with spaces
#if last char is an underscore, remove it.
$search_values = array("-", "–","‘","\'","’","“","”");
$replace_values = array("_","");

// if there are no hyphens then skip
if (! preg_match(\'/-/\',$old_slug))
    return $old_slug;


$new_slug = str_replace( $search_values, $replace_values, urldecode($old_slug));

if (strlen($new_slug) > 30)
    $new_slug = trim(substr($new_slug,0,30));

if ($new_slug[strlen($new_slug)-1] == "_")
    $new_slug = substr($old_slug,0,strlen($new_slug)-1);

return $new_slug;
}

结束

相关推荐

curl problem or permalinks

我刚刚配置了我的VPS,我使用的是Centos,一切都很好,但如果我将永久链接设置为自定义结构,然后接受主页,没有帖子出现,它会显示404页,我想这是因为我没有启用curl,但我不知道我的php在哪里。我的centos中的ini文件?好的,我的卷曲被启用了,我检查过了phpinfo(); 这里是URLhttp://74.117.158.182/info.php但如果我在我的wordpress中设置了永久链接,那么接受主页,所有都会给我404页,你可以在这个URL上查看http://mbas.co.in如果