有关Cookie的一些非WordPress特定内容:
如果在页面中完成了某些输出,则设置cookie失败,您无法在设置cookie值的同一请求中访问cookie值(正如@Milo在对OP的评论中指出的那样)/ul>另一个一般规则最好使用filter_input
或filter_intput_array
而不是直接访问$_GET
或$_COOKIE
.
作为我所说的第一件事的直接结果(如果某些输出失败,设置cookie)是尽快使用se cookie更好,在WordPress中,即使“init”很早,如果您正在编写一个可以使用的插件,也有更早的钩子\'plugin_loaded\'
如果你正在开发一个主题,你可以使用\'after_setup_theme\'
.
function set_devsource_cookie() {
global $devsource;
$get = filter_input( INPUT_GET, \'devsource\', FILTER_SANITIZE_STRING );
if ( ! empty( $get ) ) {
$devsource = $get;
setcookie( \'devsourceurl\', $devsource, time() + 3600, COOKIEPATH, COOKIE_DOMAIN, false );
} else {
$cookie = filter_input( INPUT_COOKIE, \'devsourceurl\', FILTER_SANITIZE_STRING );
if ( ! empty( $cookie ) ) {
$devsource = $cookie;
}
}
// debug
// die( \'---------------------\');
// uncommenting previous line, the dashes must be the the absolutely first line
// if there\'s something first, even an empty line the cookie can\'t be set!
}
// prefer this on plugin
// add_action( \'plugins_loaded\', \'set_devsource_cookie\', 0 );
add_action( \'after_setup_theme\', \'set_devsource_cookie\', 0 );
现在测试是否在wp页脚上设置了该值(仅作为示例):
function test_devsource_cookie() {
global $devsource;
echo \'Devsource is: \';
echo ! empty( $devsource ) ? $devsource : \'not set.\';
echo \'<br>Set again to random uri: \';
$random = strtolower( wp_generate_password( 6, FALSE, FALSE ) );
$url = add_query_arg( array(\'devsource\' => "http://dev.{$random}.com/" ) );
echo \'<a href="\' . $url . \'">Set</a>\';
}
add_action( \'wp_footer\', \'test_devsource_cookie\' );
如果此代码不起作用,则可能会在代码运行之前在页面上输出一些内容(插件、主题),有时甚至在
<?php
如果无法设置cookie,请参阅my中的注释行
set_devsource_cookie
作用
如果您在页面上看到一些输出,请禁用所有插件并使用默认主题,将我的代码放入插件并仅激活它:代码应该可以工作。
之后,逐个重新启用主题和插件,以找到罪魁祸首。
最后一个提示:当您需要将url作为参数传递给url时,请确保使用urlencode
, 我在我的test_devsource_cookie
作用