GET_THEME_MOD未检索值

时间:2016-12-20 作者:user3638239

我正在使用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}}
    
    如果我再次离开,请返回自定义程序并进行一次更改和保存,它通常会起作用

    在整个过程中,我一行代码都没有更改。

    1 个回复
    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,因为您收到了错误消息。

    相关推荐