-
-
Save bacoords/46e6e1ad9a4cc974769713303c8c71ac to your computer and use it in GitHub Desktop.
Check if a local file exists in the WordPress media library and if it doesn't exist, replace the URL with a different URL. Helpful when working with a local site that doesn't have all of the media downloaded as the production site. See https://localwp.com/community/t/proxying-requests-to-wp-content-uploads-to-a-production-site/15701
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Put this in wp-config.php and replace https://example.com/ with the URL of the production site. | |
define( 'BC_USE_REMOTE_MEDIA_URL', 'https://example.com' ); | |
// Put the rest of this in functions.php or a custom plugin or somewhere else. | |
if ( defined( 'BC_USE_REMOTE_MEDIA_URL' ) && ! empty( BC_USE_REMOTE_MEDIA_URL ) ) { | |
add_filter( 'wp_get_attachment_image_src', 'bc_filter_wp_get_attachment_image_src' ); | |
add_filter( 'wp_calculate_image_srcset', 'bc_filter_wp_calculate_image_srcset' ); | |
add_filter( 'wp_get_attachment_url', 'bc_filter_wp_get_attachment_url' ); | |
} | |
function bc_filter_wp_get_attachment_image_src( $image = array() ) { | |
if ( ! is_array( $image ) || empty( $image ) ) { | |
return $image; | |
} | |
$wp_upload_dir = wp_upload_dir(); | |
$base_dir = $wp_upload_dir['basedir']; | |
$base_url = $wp_upload_dir['baseurl']; | |
$absolute_path = str_replace( $base_url, $base_dir, $image[0] ); | |
if ( file_exists( $absolute_path ) ) { | |
return $image; | |
} | |
$find = get_site_url(); | |
$replace = BC_USE_REMOTE_MEDIA_URL; | |
$image[0] = str_replace( $find, $replace, $image[0] ); | |
return $image; | |
} | |
function bc_filter_wp_calculate_image_srcset( $src = array() ) { | |
if ( is_array( $src ) && ! is_admin() ) { | |
$wp_upload_dir = wp_upload_dir(); | |
$base_dir = $wp_upload_dir['basedir']; | |
$base_url = $wp_upload_dir['baseurl']; | |
$find = get_site_url(); | |
$replace = BC_USE_REMOTE_MEDIA_URL; | |
foreach ( $src as $key => $val ) { | |
$absolute_path = str_replace( $base_url, $base_dir, $val['url'] ); | |
if ( ! file_exists( $absolute_path ) ) { | |
$val['url'] = str_replace( $find, $replace, $val['url'] ); | |
$src[ $key ] = $val; | |
} | |
} | |
} | |
return $src; | |
} | |
function bc_filter_wp_get_attachment_url( $url = '' ) { | |
if ( is_admin() ) { | |
return $url; | |
} | |
$wp_upload_dir = wp_upload_dir(); | |
$base_dir = $wp_upload_dir['basedir']; | |
$base_url = $wp_upload_dir['baseurl']; | |
$find = get_site_url(); | |
$replace = BC_USE_REMOTE_MEDIA_URL; | |
$absolute_path = str_replace( $base_url, $base_dir, $url ); | |
if ( ! file_exists( $absolute_path ) ) { | |
$url = str_replace( $find, $replace, $url ); | |
} | |
return $url; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment