将代码从主题标题移动到函数。php

时间:2015-10-28 作者:Javacadabra

只是想得到一些关于向我的wordpress网站添加自定义代码的建议。我正在使用geoip 检查用户的国家/地区代码,并在他们登陆我的主页时将其重定向到相关网站。

目前,我将此块php 在我的主题的最顶端编写代码header.php 文件然而,我不确定这是最好的方式,在functions.php 如果是,是否有hook 当主页即将加载并相应重定向时,我可以使用调用此代码?

$url = $_SERVER[\'REQUEST_URI\'];
require_once("geoip.inc");
$gi = geoip_open(dirname(__FILE__) . "/GeoIP.dat", GEOIP_STANDARD);
$country_code = geoip_country_code_by_addr($gi, $_SERVER[\'REMOTE_ADDR\']);
geoip_close($gi);
if ($url === "/") {
    //If IE go to /ie
    if ($country_code === "IE") {
        header("Location: http://www.wpmultisite.com/ie");
        die();
    }//If GB go to /uk
    else if ($country_code === "GB") {
        header("Location: http://www.wpmultisite.com/uk");
        die();
    }
}
我应该指出,我正在尝试使用Wordpress Multisite 功能。

非常感谢您的帮助。

3 个回复
最合适的回答,由SO网友:Pat J 整理而成

我建议将其移动到插件中,而不是在主题中进行,然后在主站点上激活它。我遵循的规则是,如果它将影响外观,那么它将进入主题;如果它影响了功能,那么它会进入插件。在我看来,这是一个功能性的东西。

wp-content/plugins/my-ms-redirector/my-ms-redirector.php:

<?php

/*
Plugin Name: My MS Redirector
Description: Redirects to /ie, /uk, etc based on geoip
*/

add_action( \'init\', \'wpse206906_redirector\' );

function wpse206906_redirector() {
    $url = $_SERVER[\'REQUEST_URI\'];
    require_once("geoip.inc");
    $gi = geoip_open(dirname(__FILE__) . "/GeoIP.dat", GEOIP_STANDARD);
    $country_code = geoip_country_code_by_addr($gi, $_SERVER[\'REMOTE_ADDR\']);
    geoip_close($gi);
    if ($url === "/") {
        //If IE go to /ie
        if ($country_code === "IE") {
            wp_redirect( \'http://www.wpmultisite.com/ie\' ) ;
            exit();
        }//If GB go to /uk
        if ($country_code === "GB") {
            wp_redirect( \'http://www.wpmultisite.com/uk\' );
            exit();
        }
    }
}
参考文献wp_redirect()
  • init hookdie() 和exit() 功能相同,但我倾向于使用exit() 当我只想结束PHP执行时die() 当我想抛出错误时。这是个人喜好。)

  • SO网友:Pavel S.

    我相信您可以尽早使用此代码。我个人会将此任务交给Web服务器和/或Varnish或类似的优秀软件。

    对于WordPress,您可以/index.php 用这个,或者连接到一个最早期的钩子上,比如muplugins_loaded, plugins_loaded, setup_theme 等等

    SO网友:leromt

    在函数中尝试以下操作。php文件

    add_action(\'wp_head\',\'language_redirect\');
    
    function language_redirect() {
    
    
    require_once("geoip.inc");
    $gi = geoip_open(dirname(__FILE__) . "/GeoIP.dat", GEOIP_STANDARD);
    $country_code = geoip_country_code_by_addr($gi, $_SERVER[\'REMOTE_ADDR\']);
    geoip_close($gi);
    if (is_front_page()) {
        //If IE go to /ie
        if ($country_code === "IE") {
            header("Location: http://www.wpmultisite.com/ie");
            die();
        }//If GB go to /uk
        else if ($country_code === "GB") {
            header("Location: http://www.wpmultisite.com/uk");
            die();
        }
    }
    
    }
    

    相关推荐

    无法在模板函数.php中使用IS_HOME

    我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请