首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WordPress附件网页网址重写!

WordPress附件网页网址重写!
EN

WordPress Development用户
提问于 2021-02-01 12:24:36
回答 1查看 278关注 0票数 0

我正在使用FooGallery创建一个图库站点,并在附件页面中打开各个图像。从这里开始,我尝试了一堆代码来将附件url从?attachment_id=8184重写到/photos/ not url,但是它们没有正常工作。

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

对永久修复这件事有帮助吗?

代码语言:javascript
复制
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' );
EN

回答 1

WordPress Development用户

回答已采纳

发布于 2021-02-01 14:36:03

代码中有三个问题:

  1. 在您的自定义wp_attachment_link()函数中,您应该使用后段塞($attachment->post_name),而不是简单地在帖子标题中用- (破折号)替换(空格)--并且请注意,产生的段塞可能与实际的段塞不同,例如标题可以是My Image,而实际的段塞是my-image-2,但是您的str_replace()-ing会导致my-image
  2. 在重写规则中,没有$matches[2],只有$matches[1]与匹配,就像在example.com/photos/中一样。
  3. 同样在该规则中,查询是无效的:您应该使用attachment参数而不是attachment_id,所以正确的查询是attachment=$matches[1]

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

代码语言:javascript
复制
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\-]+)/?不要忘记刷新重写规则;只需访问permalink设置管理页面(wp-admin→settings→Permalinks)。另外,您应该使用唯一的函数名,而不是wp_attachment_link,例如使用my_prefix_attachment_link。:),
        'index.php?attachment=$matches[1]',
        'top'
    );
} );

不要忘记刷新重写规则;只需访问permalink设置管理页面(D23→settings→Permalinks)。另外,您应该使用唯一的函数名,而不是wp_attachment_link,例如使用my_prefix_attachment_link。:)

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/382585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档