从自定义固定链接结构中删除前导零

时间:2012-09-18 作者:user20567

我的WordPress网站当前使用此自定义永久链接结构:%author%/%year%/%monthnum%/%day%/%postname%

在本例中,%monthnum%实例化了带前导零的编号日期,例如,“09”表示9月。因此,示例URL可能如下所示:
mywebsite。com/username/2012/09/12/post name

是否有我可以添加或的函数。htaccess可以进行哪些更改,以从permalink结构中删除前导零?因此,使用上面的示例,我的URL最好是这样的:
我的网站。com/username/2012/9/12/post name

非常感谢。我读过WordPress的结构标签文档(http://codex.wordpress.org/Using_Permalinks),但对于上述问题,我找不到任何解决方案或插件。

3 个回复
SO网友:Sally CJ

How about using custom rewrite tags/structure?

所以我们将使用这两个rewrite/structure tags:

  1. %monthnum2%%monthnum% 标记,但无前导零;e、 g。3 而不是03 三月。

  2. %day2%%day% 标记,但无前导零;e、 g。7 而不是07.

The steps:

<主题函数文件中的ol>
  • (functions.php), 添加:

    add_action( \'init\', function(){
        add_rewrite_tag( \'%monthnum2%\', \'([0-9]{1,2})\', \'monthnum=\' );
        add_rewrite_tag( \'%day2%\',      \'([0-9]{1,2})\', \'day=\' );
    } );
    
    这将生成%monthnum2%%day2% (重写)标记,并在WordPress(重新)生成重写规则时使用。

    然后添加以下内容:

    add_filter( \'post_link\', function( $permalink, $post ){
        if ( preg_match( \'/%(?:monthnum2|day2)%/\', $permalink ) ) {
            $time = strtotime( $post->post_date );
            $date = explode( \' \', date( \'n j\', $time ) );
    
            $permalink = str_replace( [
                \'%monthnum2%\',
                \'%day2%\',
            ], [
                $date[0],
                $date[1],
            ], $permalink );
    
            $permalink = user_trailingslashit( $permalink, \'single\' );
        }
        return $permalink;
    }, 10, 2 );
    
    这将替换永久链接中的重写标记。

    进入永久链接设置页面,然后在“自定义结构”框中输入以下结构:/%year%/%monthnum2%/%day2%/%postname%//%author%/%year%/%monthnum2%/%day2%/%postname%, 以适用者为准。

    关键是,使用%monthnum2% 显示不带前导零的月数,以及%day2% 显示不带前导零的日数。

    保存您的更改&mdash;主题函数文件和永久链接设置&mdash;然后转到“帖子”页面(wp-admin/edit.php) 只需检查所有内容(鼠标悬停在post permalink上并访问post)。

  • SO网友:fuxia

    滤器\'month_link\'\'day_link\', WordPress将找到匹配的帖子,无需进一步工作。

    示例代码:

    add_filter( \'month_link\', \'t5_strip_leading_zeros_in_url\' );
    add_filter( \'day_link\',   \'t5_strip_leading_zeros_in_url\' );
    
    function t5_strip_leading_zeros_in_url( $url )
    {
        // no pretty permalinks
        if ( ! $GLOBALS[\'wp_rewrite\']->get_month_permastruct() )
        {
            return $url;
        }
    
        return str_replace( \'/0\', \'/\', $url );
    }
    

    SO网友:SHA3.org

    htaccess解决方案

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_URI} ^/.*?/.*?/[0][1-9]/.*?/.*?$
    RewriteRule ^(.*?)/(.*?)/[0]([1-9])/ /$1/$2/$3/ [R=301]
    </IfModule>
    
    我创建了一个工作示例供您测试here

    这样做的目的是检查提供的路径结构,如果第三条路径包含前导0和数字1-9,例如/03/,则将重写规则应用于第三条路径,保留前两条路径和其他路径不变(.*?)/(.*?)/. 该规则仅在第三条路径匹配时更改该路径(01-09)[0]([1-9]) 从eg/03/至/3/。

    不会影响/上载/每月图像路径,因为上载结构与提供的结构不匹配。请使用上面的链接进行测试,看看它是否适合您的需要。

    结束

    相关推荐

    Permalinks Won't Work

    由于某种原因,永久物不会起作用。我单击选项3的单选按钮,然后单击保存,但它会返回到选项1。发生什么事了?(这不应该是FTP问题-它有本地主机访问数据库的权限,我可以在Wordpress fine中下载插件。)