Wordpress - 如何在加载之前修改特色图片的 URI
Wordpress - How to modify URI of Featured image before it loaded
我正在使用 Wordpress 4.5。之前我使用本地服务器存储图片(包括Featured Image,例如:wp-content/uploads/2016/03/aaabbbccc.jpg)。现在我想将它移动到 AWS S3 Bucket 和 Cloudfront,我不想在 Wordpress 的数据库中进行更改并决定编写一个插件以将我的 cloudfront 域(替换当前域)加入 wp-content
link每次从数据库中检索,如:https://xxyyzzqqaa.cloudfront.net/wp-content/uploads/2016/03/aaabbbccc.jpg.
我在我的插件中使用了一个动作挂钩:
add_action( 'the_post', 'change_featured_image' );
现在我不知道下一步该做什么?请给我一些建议,在此先感谢!
我找到了我的问题的解决方案,非常简单,但我是 WP 的新手,所以我看不到这个。
在您的插件中,或者您希望在加载 WP 时捕获此事件的位置,添加此过滤器:
add_filter('post_thumbnail_html','change_featured_image');
随着:
- post_thumbnail_html是WP内置的过滤器。
- change_featured_image 是函数,用户定义,运行 在 post_thumbnail_html return 之前是它的结果。
我对这个函数有些迷惑,我不知道要获取值的变量。最后,我在WP API文档中找到了它,每个vars内置过滤器都使用,你也可以使用。
示例代码如下:
function change_featured_image($attr)
{
global $wpdb;
$opt = get_option('s3dcs_status');//My value in `wp_options`
if(empty($opt)) echo $attr;
else{
/// Preparing variables
$pattern = '~(http.*\.)(jpe?g|png|[tg]iff?|svg)~i';
$m = preg_match_all($pattern,$attro,$matches);
$il = $matches[0][0];
$tail = explode("wp-content", $il)[1];
$s3dcs_remote_link = get_option('s3dcs_cfs3in') . "/wp-content" . $tail;
echo str_replace($il, $s3dcs_remote_link, $attr) ;
}
}
就是这样。如果您有问题,请post在这里让每个人都知道。
我正在使用 Wordpress 4.5。之前我使用本地服务器存储图片(包括Featured Image,例如:wp-content/uploads/2016/03/aaabbbccc.jpg)。现在我想将它移动到 AWS S3 Bucket 和 Cloudfront,我不想在 Wordpress 的数据库中进行更改并决定编写一个插件以将我的 cloudfront 域(替换当前域)加入 wp-content
link每次从数据库中检索,如:https://xxyyzzqqaa.cloudfront.net/wp-content/uploads/2016/03/aaabbbccc.jpg.
我在我的插件中使用了一个动作挂钩:
add_action( 'the_post', 'change_featured_image' );
现在我不知道下一步该做什么?请给我一些建议,在此先感谢!
我找到了我的问题的解决方案,非常简单,但我是 WP 的新手,所以我看不到这个。
在您的插件中,或者您希望在加载 WP 时捕获此事件的位置,添加此过滤器:
add_filter('post_thumbnail_html','change_featured_image');
随着:
- post_thumbnail_html是WP内置的过滤器。
- change_featured_image 是函数,用户定义,运行 在 post_thumbnail_html return 之前是它的结果。
我对这个函数有些迷惑,我不知道要获取值的变量。最后,我在WP API文档中找到了它,每个vars内置过滤器都使用,你也可以使用。
示例代码如下:
function change_featured_image($attr)
{
global $wpdb;
$opt = get_option('s3dcs_status');//My value in `wp_options`
if(empty($opt)) echo $attr;
else{
/// Preparing variables
$pattern = '~(http.*\.)(jpe?g|png|[tg]iff?|svg)~i';
$m = preg_match_all($pattern,$attro,$matches);
$il = $matches[0][0];
$tail = explode("wp-content", $il)[1];
$s3dcs_remote_link = get_option('s3dcs_cfs3in') . "/wp-content" . $tail;
echo str_replace($il, $s3dcs_remote_link, $attr) ;
}
}
就是这样。如果您有问题,请post在这里让每个人都知道。