最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Code snippet to add filter pre_post_link to change Media URL (post_type attachment permalinkslug)

programmeradmin7浏览0评论

I found a very good code snippet to add a "base" into URL of blog posts: Custom permalink structure with a prefix just for posts

I tested it and it works great for post_type: post (to test it I created a "Must Use Plugin" in wp-content/mu-plugins/rewrite-me.php with the PHP code).

I tried to modify it for Media by changing post to attachment but it doesn't work... Could you please tell me what's wrong with it?

Ideally I don't want to use a plugin for this. I would like all attachments (media) links to have a base in URLs. For example image my-cat.jpg gets by default permalink/slug example/my-cat but I would prefer if it can get example/someprefix/my-cat. Could you please help me with that?

<?php

add_filter('pre_post_link', 'se332921_pre_post_link', 20, 3);
add_filter('post_rewrite_rules', 'se332921_post_rewrite_rules');

/**
 * @param string  $permalink The site's permalink structure.
 * @param WP_Post $post      The post in question.
 * @param bool    $leavename Whether to keep the post name.
 */
function se332921_pre_post_link($permalink, $post, $leavename)
{
    if ( $post instanceof WP_Post && $post->post_type == 'attachment')
        $permalink = '/attachment-prefix'.$permalink;
    return $permalink;
}

/**
 * @param array $post_rewrite The rewrite rules for posts.
 */
function se332921_post_rewrite_rules($post_rewrite)
{
    if ( is_array($post_rewrite) )
    {
        $rw_prefix = [];
        foreach( $post_rewrite as $k => $v) {
            $rw_prefix[ 'attachment-prefix/'.$k] = $v;
        }
        //
        // merge to keep original rules
        $post_rewrite = array_merge($rw_prefix, $post_rewrite);
        //
        // or return only prefixed:
        // $post_rewrite = $rw_prefix;
    }
    return $post_rewrite;
}

Thank you ;-).

Kind regards,

Ben

发布评论

评论列表(0)

  1. 暂无评论