将附件放入存档页面

时间:2016-09-24 作者:powerbuoy

我试图覆盖WP的默认附件URL结构,如果附件附加到帖子,URL为/post-slug/attachment-slug/,如果不是,则为/attachment-slug/。

相反,我希望附件的行为类似于帖子,因为它们有一个存档,所有URL都指向/archive-slug/attachment-slug/。

我发现了一个新的(我相信是4.4版)过滤器,它允许你修改帖子类型选项,但它似乎不像广告中所说的那样工作;

add_filter(\'register_post_type_args\', function ($args, $postType) {
    if ($postType == \'attachment\'){
        $args[\'has_archive\'] = true;
        $args[\'rewrite\'] = [
            \'slug\' => \'media\'
        ];
    }

    return $args;
}, 10, 2);
如果我var_dump($args) 事实上,它们看起来是正确的(has\\u archive is true等),但似乎对URL没有任何影响。

如果开发人员的这一评论是正确的,这可能并不奇怪;“不适用于内置帖子类型”https://core.trac.wordpress.org/changeset/34242.

所以我的问题是,我怎样才能做到这一点?

我还尝试在init钩子中修改post-type对象,但它不会咬人:

$obj = get_post_type_object(\'attachment\');

$obj->has_archive = true;
$obj->rewrite = [
    \'slug\' => \'media\'
];

2 个回复
SO网友:Tom G

这是未经测试的,所以很抱歉,但我想得很清楚,你有没有尝试过以后重新注册帖子类型?或在首次尝试后刷新重写规则flush_rewrite_rules();?

function change_attachment_post_type() {

    $args = get_post_type_object(\'attachment\');
    $args->has_archive = true;
    $args->rewrite = [
        \'slug\' => \'media\'
    ];
    register_post_type($args->name, $args);

    // As a temporary one time, remove after first flush
    flush_rewrite_rules();
}
add_action(\'init\', \'change_attachment_post_type\', 20);

SO网友:Denis Gorodetsky

这是我的解决方案。首先,您需要更改附件post类型的参数(如问题中所述):

add_filter( \'register_post_type_args\', \'change_attachment_post_type_args\', 10, 2 );
function change_attachment_post_type_args( $args, $post_type ){
    //Turn on attachment archive page
    if( \'attachment\' == $post_type ){
        $args[\'has_archive\']  = \'media\';//this is slug
        $args[\'rewrite\']      = true;
    }
    return $args;
}
然后更改post_statusinherit 在…内WP_Query 因为默认值为post_statuspublish 但所有附件都有inherit 状态:

add_action( \'pre_get_posts\', \'get_all_posts_attachment\' , 10, 1);
function get_all_posts_attachment( $query ) {
    if( is_post_type_archive(\'attachment\') && \'attachment\' == $query->get(\'post_type\') )
    {
        $query->set( \'post_status\', \'inherit\' );
    }
    return $query;
}

相关推荐

Permalinks - Archives

WordPress文档说:WordPress offers you the ability to create a custom URL structure for your permalinks and archives. https://codex.wordpress.org/Settings_Permalinks_Screen 我看到此屏幕将如何为特定帖子/页面创建永久链接,但我没有看到此设置屏幕上关于如何为存档帖子/页面创建链接的任何其他详细信息。有人能澄清一下吗?