我不确定这是不是真的,但小部件的内容似乎是缓存的。我最初认为我的代码有问题(我需要根据会话值在自定义小部件中隐藏/显示一个部分),但我对所有小部件和get\\u option()都有同样的问题。
我做了这个测试。
在“A”页中,我更新了一个选项:
update_option( \'custom_check\', \'a\' );
在“B”页中,我用不同的值更新相同的选项:
update_option( \'custom_check\', \'b\' );
当我从页面“A”转到“B”(或反之)时,数据库中的选项会正确更新。并在页面中正确打印值,包括:
echo get_option( \'custom_check\' );
但是如果我在一个小部件中打印该值(我尝试过使用不同的小部件,包括默认文本和最近发布的小部件),则该值不会更新。直到刷新页面。
示例:我在“A”页上,因此值为“A”。当我访问页面“B”时,数据库中的值为“B”,并在页面内容中正确打印。但小部件显示旧值(“a”)。当我刷新页面时,小部件显示正确的值(“b”)。
有什么想法吗?
[Edit] 我会尽力更好地解释我的意思。
我用的是214,不是自定义主题。在侧边栏中,我有一个带有“A”和“B”页的菜单,这样我只需单击一下即可访问这些页面(@s\\u ha\\u dum♦ 不涉及AJAX)。以及WordPress中包含的默认文本小部件。
在里面page.php
(214)我在顶部有以下代码:
<?php
if ( is_page( 749 ) ) {
update_option( \'custom_check\', \'a\' );
} elseif ( is_page( 800 ) ) {
update_option( \'custom_check\', \'b\' );
}
echo get_option( \'custom_check\' );
?>
749和800是页面“A”和“B”的ID。
为了测试小部件中的变量,我在/wp-includes/default-widgets.php
(我知道这是一种不好的做法,我只是在测试),在WP\\u Widget\\u Text类中:
echo get_option( \'custom_check\' );
问题:我在“A”页上,“custom\\u check”等于“A”,小部件显示“A”。当我单击菜单上的页面“B”链接时,“custom\\u check”等于db中的“B”,并正确打印在页面顶部。但在文本小部件中,我仍然看到“a”。如果刷新页面,小部件将显示正确的值。
这是缓存问题吗?或者是选项更新太晚了(在widget\\u init之后)?