WordPress附件页URL重写!

时间:2021-02-01 作者:Praveen Kumar

我正在使用FooGallery创建一个图库网站,并在附件页中打开各个图像。我在这里尝试了一系列代码来重写附件URL?附件\\u id=8184到/照片/frienly url,但它们工作不正常。

下面的代码可以工作,但不稳定。如果只对一幅图像有效,几个小时后它就会开始重定向到主页。

有没有关于永久修复此问题的帮助?

add_filter( \'attachment_link\', \'wp_attachment_link\', 20, 2 );
function wp_attachment_link( $link, $attachment_id ){
$attachment = get_post( $attachment_id );
$attachment_title = $attachment->post_title ;
$attachment_title = str_replace( \' \' , \'-\' , $attachment_title );
$site_url = get_site_url( $attachment_id );
$link =  $site_url . \'/photos/\'  .$attachment_title;
return $link;
}
// Rewrite attachment page link
add_action( \'init\', function() {
add_rewrite_rule( \'photos/([A-Za-z0-9-]+)?$\', \'index.php?attachment_id=$matches[2]\', \'top\' );

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

代码中有三个问题:

根据您的习惯wp_attachment_link() 函数,您应该使用post slug($attachment->post_name) 而不是简单地更换 (空白)带- (破折号)在帖子标题中-注意,生成的slug可能与实际slug不同,例如标题可能是My Image 实际段塞为my-image-2, 然而你的str_replace()-ing将导致my-image.

在重写规则中,没有$matches[2], 只有$matches[1]<slug> 如中所示example.com/photos/<slug>.

同样在该规则中,查询无效:您应该使用attachment 参数和notattachment_id, 所以正确的答案是attachment=$matches[1].

这样可以帮助您修复自己的代码,或者您可以尝试我的代码:

add_filter( \'attachment_link\', \'wp_attachment_link\', 20, 2 );
function wp_attachment_link( $link, $attachment_id ) {
    if ( ! $slug = get_post_field( \'post_name\', $attachment_id ) ) {
        return $link; // you should just do this if the slug is empty..
    }

    return home_url( user_trailingslashit( "/photos/$slug", \'single\' ) );
}

// Rewrite attachment page link.
add_action( \'init\', function() {
    add_rewrite_rule( // wrapped for brevity
        \'^photos/([\\w\\-]+)/?$\',
        \'index.php?attachment=$matches[1]\',
        \'top\'
    );
} );
别忘了刷新重写规则;只需访问permalink设置管理页面(wp-admin → 设置→ Permalinks)。此外,您应该使用唯一的函数名,而不是wp\\u attachment\\u link,例如,使用my\\u prefix\\u attachment\\u link:)

相关推荐

Force pretty permalinks?

我正在构建一个插件,该插件将用于单个站点,并依赖于add_rewrite_rule 要工作,需要打开永久链接。打开它们并不困难,因为它只是一个站点,但我担心其中一个管理员可能会在不知道自己在做什么的情况下关闭它,并破坏该站点。如何以编程方式强制保持漂亮的永久链接?