我正在使用Wordpress自定义程序功能来配置我的主题,我经常遇到同样令人讨厌的问题,有时我在预览窗口中看到更改的效果时,从get\\u theme\\u mod中看不到任何值。
以下是一些代码:
$active_type="home";
$wp_customize->add_setting($active_type.\'_categories_max\',array(
\'default\' => \'10\',
\'transport\' => \'refresh\'
));
$wp_customize->add_control( $active_type.\'_categories_max\',array(
\'type\' => \'select\',
\'label\' => \'Max Items\',
\'section\' => $active_type.\'_categories_section\',
\'choices\' => array(
\'5\' => \'2\',
\'10\' => \'10\',
\'15\' => \'15\',
\'20\' => \'20\',
),
));
在我的php页面上,我有:
$test = get_theme_mod(\'home_categories_max\');
echo $test;
在自定义程序中,每次更改值时,我都会在预览窗口中看到正确的值。如果我保存并直接访问页面(没有自定义程序),我不会一直获得值。有时我会立即得到值,有时如果不对代码进行任何更改,我根本无法得到它。
我最初认为这是一个缓存问题,但清空服务器和浏览器上的缓存并没有解决这个问题。如果我保存了该值,请退出自定义程序,然后返回,我看到该值已保存,但get\\u theme\\u mod仍返回空值。
我真的看不出我的代码有什么问题,因为它有时在不改变任何东西的情况下工作。
你有什么想法吗?
谢谢
劳伦特
UPDATE 28/12:
我看到两个问题正在发生。
单击“保存”时无法保存(&L);“发布”按钮,“忙碌”图标出现,然后消失,但保存;“发布”按钮保持不变。如果我签入数据库,则未更新任何内容。
保存在db中,但当我在数据库中看到如下正确的条目时,不可见:{
"2016-Foundation6-v0.6::single_categories_location_priority": {
"value": "0",
"type": "theme_mod",
"user_id": 1
}
}
我有时在使用get\\u theme\\u mod时没有任何价值
还有一件事
我注意到,当我只做一次改变时,我的成功率更高。假设我第一次去定制器,我更改了一件事并保存,我得到了以下结果:
{"success":true,"data":{"setting_validities":{"single_carousel_location":true},"changeset_status":"publish"
,"next_changeset_uuid":"9aff0388-b0bc-4be8-ba1a-2fd3cf24772c"}}
如果我尝试进行其他更改(与第一个更改无关),我会收到以下信息:
{"success":false,"data":{"message":"","code":"changeset_already_published","data":null}}
如果我再次离开,请返回自定义程序并进行一次更改和保存,它通常会起作用
在整个过程中,我一行代码都没有更改。
SO网友:prosti
这真的很简单。set_theme_mod
File: /wp-includes/theme.php
889: function set_theme_mod( $name, $value ) {
890: $mods = get_theme_mods();
891: $old_value = isset( $mods[ $name ] ) ? $mods[ $name ] : false;
892:
893: /**
894: * Filters the theme mod value on save.
895: *
896: * The dynamic portion of the hook name, `$name`, refers to the key name of
897: * the modification array. For example, \'header_textcolor\', \'header_image\',
898: * and so on depending on the theme options.
899: *
900: * @since 3.9.0
901: *
902: * @param string $value The new value of the theme mod.
903: * @param string $old_value The current value of the theme mod.
904: */
905: $mods[ $name ] = apply_filters( "pre_set_theme_mod_{$name}", $value, $old_value );
906:
907: $theme = get_option( \'stylesheet\' );
908: update_option( "theme_mods_$theme", $mods );
909: }
将保存到选项表中
theme_mods_$theme
哪里
$theme
是您的主题名称。但只有在按下“保存”按钮后,才会发生这种情况;发布自定义程序按钮。
预览页面就像一个梦境(Lat:Et est fallacia lunae)。无论您做什么,这些值都不会保存到数据库中。我认为这是你面临的唯一问题。
我骗了你一手的东西。我可以确认我可以保存这些值every 时间
function _20161230_customize_register( $wp_customize ) {
$active_type="home";
$wp_customize->add_section( $active_type. \'just_listed\' , array(
\'title\' => __( \'Just Listed Settings\', \'microformata\' ),
\'priority\' => 53,
) );
$wp_customize->add_setting($active_type.\'_categories_max\',array(
\'default\' => \'10\',
\'transport\' => \'refresh\'
));
$wp_customize->add_control( $active_type.\'_categories_max\',array(
\'type\' => \'select\',
\'label\' => \'Max Items\',
\'section\' => $active_type.\'just_listed\',
\'choices\' => array(
\'5\' => \'2\',
\'10\' => \'10\',
\'15\' => \'15\',
\'20\' => \'20\',
),
));
}
add_action( \'customize_register\', \'_20161230_customize_register\' );
Ajax结果如下:
{success: true, data: {setting_validities: {home_categories_max: true}, changeset_status: "publish",…}}
data
:
{setting_validities: {home_categories_max: true}, changeset_status: "publish",…}
changeset_status
:
"publish"
next_changeset_uuid
:
"4b1ac702-3ae2-422d-875a-a02b6f5b2d65"
setting_validities
:
{home_categories_max: true}
success
:
true
我不确定的是,你能禁用你使用的插件然后进行测试吗。我知道您使用4.7,因为您收到了错误消息。