完全禁用附件页面

时间:2016-08-31 作者:Maciej Krawczyk

我想完全禁用所有附件页。我在谷歌上搜索了一下,但只有how to redirect to parent post or homepage. 这不是我所说的优雅的解决方案。为什么要引入不必要的永久链接重定向到主页?难道不能完全禁用它吗?

3 个回复
SO网友:Ihor Vorotnov

您可以筛选默认重写规则并删除附件的重写规则:

function cleanup_default_rewrite_rules( $rules ) {
    foreach ( $rules as $regex => $query ) {
        if ( strpos( $regex, \'attachment\' ) || strpos( $query, \'attachment\' ) ) {
            unset( $rules[ $regex ] );
        }
    }

    return $rules;
}
add_filter( \'rewrite_rules_array\', \'cleanup_default_rewrite_rules\' );
别忘了重新保存永久链接一次。WordPress将生成与附件无关的新规则。

现在,附件页面URL给出了404。您还可以添加重定向以阻止404页面,在这种情况下它是无用的。但是我不确定如何捕获重定向-如果删除重写规则,is\\u attachment()将无法工作。

Update:

WordPress仍将在媒体库和媒体插入对话框中提供附件页的漂亮URL。您也可以对此进行筛选:

function cleanup_attachment_link( $link ) {
    return;
}
add_filter( \'attachment_link\', \'cleanup_attachment_link\' );
在这种情况下,即使在将附件插入帖子并选择“链接到附件页面”时,图像也会被插入without the link.

SO网友:simongcc

对于那些可能不使用插件或喜欢轻量级方法的人。这可能会有所帮助。

此方法将附件重定向到确切的文件,而不是附件页,这是一些插件正在使用的方法。

要进行测试,请将以下代码放入functions.php 主题的。

add_action( \'template_redirect\', \'test_attachment_redirect\', 10 );
function test_attachment_redirect() {
    if( is_attachment() ) {
        $url = wp_get_attachment_url( get_queried_object_id() );
        wp_redirect( $url, 301 );
    }
    return;
}
参考号:is_attachmentwp_redirect

SO网友:fairport

如果要完全禁用媒体页,应使用404响应代码,而不是重定向。这可以通过以下代码完成:

function wpse237762_set_404() {
    if (is_attachment()) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
    }
}

// This will show 404 on the attachment page
add_filter(\'template_redirect\', \'wpse237762_set_404\');

// This will show 404 instead of redirecting to attachment page when dealing with a trailing slash
add_filter(\'redirect_canonical\', \'wpse237762_set_404\', 0);
要使指向附件页的链接保持工作状态并将其直接重定向到文件,可以使用以下代码:

function wpse237762_change_attachment_link($url, $id) {
    $attachment_url = wp_get_attachment_url($id);
    if ($attachment_url) {
        return $attachment_url;
    }
    return $url;
}

add_filter(\'attachment_link\', \'wpse237762_change_attachment_link\', 10, 2);
为了防止附件页保留普通页的段塞,可以使用此代码将所有新附件段塞设置为随机段塞(本例中为UUIDv4)

function wpse237762_unique_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {
    if ($post_type === \'attachment\') {
        return str_replace(\'-\', \'\', wp_generate_uuid4());
    }
    return $slug;
}

add_filter(\'wp_unique_post_slug\', \'wpse237762_unique_slug\', 10, 6);
这将阻止名为products.jpeg 保留URLhttps://example.com/products. 这将导致一个名为Products 正在获得URLhttps://example.com/products-2 这显然不是那么好。

我已经在Disable Attachment Pages plugin, 它还包括一个工具,可以扰乱现有的连接段塞,以便它们在将来不会造成任何问题。

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果