有个简单需求,就是 WordPress
多个网站同步数据的情况下,根据网站域名的不同,修改数据库返回的数据。
实现这个的需求就是在当前 WordPress
主题下的 functions.php
中实现 the_post
拦截函数,在数据库返回的数之后,进行替换。
例子如下:
1 2 3 4 5 6 7 8 9 |
function replace_serv_domain($post) { $local_addr = $_SERVER['SERVER_ADDR']; if ('10.105.114.251' == $local_addr) { // 替换服务器的访问地址信息 $post->post_content = str_ireplace('mobibrw.com', 'miniab.com', $post->post_content); } return $post; } add_action('the_post', 'replace_serv_domain'); |
这个替换过程只能针对没有使用 WP Super Cache
进行缓存的情况,如果已经使用 WP Super Cache
进行缓存,那么很可能导致没有及时生效。
如果只是需要替换域名,那么只需要在 wp-config.php 中定义 WP_HOME/WP_SITEURL 两个变量即可实现域名覆盖。
示例参考代码如下:
1 2 3 4 5 6 7 8 9 10 |
$HTTP_TYPE = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://'; $HOME = $HTTP_TYPE.$_SERVER['HTTP_HOST'].'/wordpress'; #获取当前访问的域名 $SIT_URL = $HTTP_TYPE.$_SERVER['HTTP_HOST'].'/wordpress'; #$HOME = $HTTP_TYPE.$_SERVER['HTTP_HOST']; #$SIT_URL = $HTTP_TYPE.$_SERVER['HTTP_HOST']; define('WP_HOME', $HOME); define('WP_SITEURL', $SIT_URL); |