-
-
Save dotancohen/06735ec207f6e2505166077b1bbc7152 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( 'RH_USE_REMOTE_MEDIA_URL', 'https://example.com/' ); | |
// Put the rest of this in functions.php or a custom plugin or somewhere else. | |
if ( defined( 'RH_USE_REMOTE_MEDIA_URL' ) && ! empty( RH_USE_REMOTE_MEDIA_URL ) ) { | |
add_filter( 'wp_get_attachment_image_src', array( $this, 'filter_wp_get_attachment_image_src' ) ); | |
add_filter( 'wp_calculate_image_srcset', array( $this, 'filter_wp_calculate_image_srcset' ) ); | |
add_filter( 'wp_get_attachment_url', array( $this, 'filter_wp_get_attachment_url' ) ); | |
} | |
function 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 = RH_USE_REMOTE_MEDIA_URL; | |
$image[0] = str_replace( $find, $replace, $image[0] ); | |
return $image; | |
} | |
function 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 = RH_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 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 = RH_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