如何在不破坏核心WordPress文件的情况下引用外部附件?

时间:2019-03-01 作者:Brettins

我正在开发一个使用WooCommerce&;WordPress将显示相当数量(10000多个)的产品,并且无法容纳产品的所有图像大小。因此,我将图像保留在CDN上,并将所有图像附件引用到外部URL。

这需要进行一些黑客攻击,因为WooCommerce/WordPress将尝试拍摄图像并上传它们,并将附件URL设置为本地相对路径(例如,2018/02/), 然后,当稍后在站点上调用这些图像时wp_get_attachment_url 将上载目录添加到基本映像中,如下所示site.com/wp-content/uploads/2018/02/whatever.jpg.

基本上我所做的就是

停止WordPress运行wp_generate_attachment_metadata 通过将其设置为return true 一旦调用该函数,将阻止图像下载和复制到上载目录

  • 从CSV上载产品运行MySQL查询,将woocommerce源图像URL复制到附件位置wp_get_attachment_url 为了不将上传目录附加到附件图像,对WordPress核心进行几行更改。这是不好的,因为将来任何时候当网站更新时,它都会阻止更改。

    有没有更健康的方法?

  • 1 个回复
    SO网友:filipecsweb

    请注意片段中的注释。

    <?php
    /**
     * Filters the attachment URL.
     *
     * @param   string $url    URL for the given attachment.
     * @param   int    $att_id Attachment post ID.
     *
     * @return  string  $url Custom URL for the given attachment.
     */
    function wp_get_attachment_url_callback( $url, $att_id ) {
        // Instead of keeping full path we actually need just \'wp-content/uploads\'.
        // And we do this the right way, dynamically, calling functions and constants.
        $uploads_dir         = wp_get_upload_dir()[\'basedir\'];
        $partial_uploads_dir = str_replace( ABSPATH, \'\', $uploads_dir );
    
        // Check if attachment file is in WordPress uploads directory.
        if ( strpos( $url, $partial_uploads_dir ) === false ) {
            return $url;
        }
    
        // Just for reference, until now, the $url is still something like:
        // http://example.com/wp-content/uploads/2019/03/image.jpg
    
        /**
         * @TODO    Define the right CDN URL here.
         */
        $new_site_url = \'http://cdn-domain.com\';
        $pattern      = get_site_url();
        $url          = preg_replace( "#$pattern#", $new_site_url, $url );
    
        // Again, just for reference, now the $url looks like:
        // http://cdn-domain.com/wp-content/uploads/2019/03/image.jpg
    
        return $url;
    }
    
    add_filter( \'wp_get_attachment_url\', \'wp_get_attachment_url_callback\', 999, 2 );
    
    我希望它能启发你,使你能够实现你的目标。

    相关推荐

    读取CSV值并在PHP中显示它们

    我正在进行一个项目,这是我第一次遇到CSV。我读了很多帖子,但没有找到我需要的。所以我们有和CSV,值如下Name,Country,Color,Pet David,UK,Red,Dog Andy,USA,Blue,Cat,Dog,Fish ... 所以有时“Pet”上有多个值,这就是客户端软件输出CSV的方式,我们无法更改它。我正在寻找如何在第n列之后合并列的解决方案。例如,在第6列之后,我需要将第7行的所有列合并到第7行。这有可能实现吗?我会粘贴我正在处理的代码,但这是