有没有可能用另一个词来代替‘附件’?

时间:2018-09-21 作者:ordresser

目标是将附件URL中的“attachment”一词替换为另一个词,因此访问附件就像:

地点com/类别/文章名/新词/附件名/

这在WordPress中可能吗?我不确定是否最好完全替换它(因此没有“附件”URL),或者只是添加一个URL,以便/attachment/attachment name和NEW-WORD/attachment name都可以工作(以避免WordPress更新与附件相关的内容时可能出现的问题)。

WordPress助手Milardovich建议这是一种可能的方法,但对我来说并不适用(图片/附件名称URL只带来了404,但附件/附件名称仍然有效)。

function wpd_attachment_link( $link, $post_id ){
    $post = get_post( $post_id );
    return home_url( \'/images/\' . $post->post_title );
}
add_filter( \'attachment_link\', \'wpd_attachment_link\', 20, 2 );
添加到此Milo代码(如下所示):

function wpd_rename_attachment_rewrites( $rules ){
    foreach( $rules as $key => $value ){
        $new_key = str_replace( \'attachment\', \'IMAGE\', $key );
        unset( $rules[ $key ] );
        $rules[ $new_key ] = $value;
    }
    return $rules;
}
add_filter( \'rewrite_rules_array\', \'wpd_rename_attachment_rewrites\' );
现在,代码有了一些效果,但没有完全起作用,因为它没有指向正确的URL(当您单击附件页的链接时,它会从附件URL中删除类别/文章名称),因此您会得到以下结果:

查看图像的附件页转到:

site.com/IMAGE/image-name
…因为它的URL与正确的新附件permalink不同,所以当您访问该URL时,前端会出现错误404。

但是,您可以通过键入以下内容获得正确的URL:

site.com/category/article-name/IMAGE/image-name
…并显示正确的附件页。

那么,有没有一种方法可以稍微调整您的代码,以便当您单击图像的附件时,它不会site.com/IMAGE/image-name 而是转到site.com/category/article-name/IMAGE/image-name (即增加category/article-name 指向URL方向)?

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

WordPress中的URL有两部分-

其中一部分是任何给定内容的URL输出。要更改这些内容的输出方式,需要对其进行过滤。这是你的attachment_link 过滤器有。

另一部分是WordPress如何确定请求的URL应该加载哪些内容。这是您缺少的部分-WordPress仍然希望这些请求包含attachment, 不是你的新词。

要解决这个问题,您可以过滤WordPress生成的重写规则,并替换attachment 无论你想要什么独特的东西:

function wpd_rename_attachment_rewrites( $rules ){
    foreach( $rules as $key => $value ){
        $new_key = str_replace( \'attachment\', \'new-word\', $key );
        unset( $rules[ $key ] );
        $rules[ $new_key ] = $value;
    }
    return $rules;
}
add_filter( \'rewrite_rules_array\', \'wpd_rename_attachment_rewrites\' );
编辑-

这个attachment_link 问题中的函数忽略了$link, 并以固定模式返回URL:

function wpd_attachment_link( $link, $post_id ){
    $post = get_post( $post_id );
    return home_url( \'/images/\' . $post->post_title );
}
add_filter( \'attachment_link\', \'wpd_attachment_link\', 20, 2 );
将其更改为替换attachment 在传递为的值内$link 相反,保留原始URL的其余部分:

function wpd_attachment_link( $link, $post_id ){
    return str_replace( \'/attachment/\', \'/new-word/\', $link );
}
add_filter( \'attachment_link\', \'wpd_attachment_link\', 20, 2 );

结束

相关推荐

如果我对页面使用静态页面-slug.php,数据库是否仍被查询?

我想知道如何显示静态页面以稍微增加页面负载:第一个选项是将内容放入数据库(通过管理GUI),第二个选项是创建page-slug.php 不调用内部的循环page-slug.php. 如果仍在查询数据库,则后一个选项将无效,这将导致我的问题在页面加载方面使用page-slug.php 对于静态页面,而不是将内容放入数据库</如果我使用page-slug.php (使用循环)以检查此页面是否有任何内容