Wordpress设置API错误

时间:2012-08-21 14:46:07

标签: wordpress

您好我正在尝试为我正在开发的模板创建一些自定义选项,但我似乎遇到了错误:

Warning: Illegal string offset 'show_header' in C:\xampp\htdocs\wordpress\wp-content\themes\01MyWork\includes\theme-options.php on line 62

这是似乎抛出错误的一行:

 $html = '<input type="checkbox" id="show_header" name="thanathos_theme_display_options[show_header]" value="1" ' . checked(1, $options['show_header'], false) . '/>';  

这就是整个代码:

   <?php 
    function thanatos_theme_menu(){
        add_theme_page(
                       "Thanathos Theme Options", 
                       "Thanathos Theme", 
                       "administrator", 
                       "thanathos_theme_options",
                       "thanathos_theme_display_callback"
                      );
    }
    add_action('admin_menu' , 'thanatos_theme_menu');
    function thanathos_theme_display_callback(){
?>
         <div class="wrap">  
                <div id="icon-themes" class="icon32"></div>  
                <h2>Sandbox Theme Options</h2>  

                <?php settings_errors(); ?>
                <!--Create the form that will be used to render our options-->
                <form method="post" action="options.php">
                    <?php settings_fields('thanathos_theme_display_options'); ?>
                    <?php do_settings_sections( 'thanathos_theme_display_options' ); ?>             
                    <?php submit_button(); ?>
                </form>
        </div>
<?php
    }

    add_action('admin_init' , 'thanatos_initializa_theme_options');
    function thanatos_initializa_theme_options(){
        if( false == get_option( 'thanathos_theme_display_options' ) ) {    
            add_option( 'thanathos_theme_display_options' );  
        } 
        add_settings_section(
                'general_settings_section', 
                'Thanatos Options', 
                'thanatos_general_options_callback', 
                'thanathos_theme_display_options'
        );
        add_settings_field(
                'show_header',
                'Header',
                'thanathos_field_header_callback',
                'thanathos_theme_display_options',
                'general_settings_section',
                 array(                              // The array of arguments to pass to the callback. In this case, just a description.  
                    'Activate this setting to display the header.'
                 ) 
        );
        register_setting('thanathos_theme_display_options', 'thanathos_theme_display_options');
    }

    function thanatos_general_options_callback(){
        echo 'mergem la mare';
    }
    function thanathos_field_header_callback($args){
         // First, we read the options collection  
        $options = get_option('thanathos_theme_display_options');
        // Next, we update the name attribute to access this element's ID in the context of the display options array  
        // We also access the show_header element of the options collection in the call to the checked() helper function 
        $html = '<input type="checkbox" id="show_header" name="thanathos_theme_display_options[show_header]" value="1" ' . checked(1, $options['show_header'], false) . '/>';  
         // Here, we'll take the first argument of the array and add it to a label next to the checkbox  
        $html .= '<label for="show_header"> '  . $args[0] . '</label>';   
        echo $html;
    }
?>

3 个答案:

答案 0 :(得分:1)

是的,这是有问题的部分:

if( false == get_option( 'thanathos_theme_display_options' ) ) {    
add_option( 'thanathos_theme_display_options' );  
} 

这是thanatos_initializa_theme_options()函数开头的初始if语句。

您可以在http://wp.tutsplus.com/tutorials/theme-development/the-complete-guide-to-the-wordpress-settings-api-part-4-on-theme-options/#post-684925289的非常简洁的主题选项API中找到解决方案 或者,更准确地说,在本文的评论部分。

我在这里粘贴史蒂夫邦迪的智能解决方案,因为出于某些原因使页面滚动到相应的评论对我来说不起作用(至少在Chrome中)。

START引用

(...)我遇到的一个小问题 - 我一直在重新排序代码,直到添加社交选项之前。那时我发现代码被破坏了。我会收到像

这样的错误
Warning: Illegal string offset 'show_header' in ...\themes\Sandbox\functions.php
Warning: Illegal string offset 'show_content' in ...\themes\Sandbox\functions.php
Warning: Illegal string offset 'show_footer' in ...\themes\Sandbox\functions.php

事实证明,此错误是由于将“sandbox_theme_display_options”添加到选项表而未给它赋值。如果您按如下所示更改sandbox_initialize_theme_options,它将创建并初始化选项,避免我和其他人遇到的错误。

function sandbox_initialize_theme_options() { 
     // If the theme options don't exist, create them. 
     if( false == get_option( 'sandbox_theme_display_options' ) ) { 
          $options = array("show_header" => TRUE, "show_content" => TRUE, "show_footer" => TRUE);
          add_option( 'sandbox_theme_display_options', $options);
     } // end if
(...)

如果已运行旧代码,则必须首先从数据库中删除空的“sandbox_theme_display_options”值。或者,以下代码也会检测到这种情况并进行更正。

function sandbox_initialize_theme_options() { 
     // See if the options exist, and initialize them if they don't
     $options = get_option( 'sandbox_theme_display_options' );
     if( false == $options or $options == "" ) { 
          $options = array("show_header" => TRUE, "show_content" => TRUE, "show_footer" => TRUE);
          update_option( 'sandbox_theme_display_options', $options);
     } // end if
(...)

这将检查不存在或空的选项值,并使用update_option而不是add_option初始化选项。

EOF报价

答案 1 :(得分:0)

您在纯HTML中使用name="thanathos_theme_display_options[show_header]"。可能你想用PHP解析字符串[show_header]

答案 2 :(得分:0)

您可能需要运行:     delete_option('thanathos_theme_display_options'); 期间&#39; admin_init&#39;如果你认为你有旧的插件信息在数据库中捣乱,需要一个新的开始。