插件选项不保存选项且不起作用

时间:2013-09-11 作者:Jake Snake

所以我一直在为wordpress制作一个插件,为产品添加一个自定义帖子类型,这非常简单,我做到了。

之后,我想在管理菜单中为自定义帖子类型创建一个设置页面子菜单,然后创建一些选项。

所以我遇到的第一个问题是出现了一个警告

Warning:  Illegal string offset \'option1\' in C:/blablablal on line 96
据我所知,这意味着该选项不知道应该将选项保存在数组中,而是尝试将其放入字符串中。因此,我找到了一种方法,通过在变量中添加括号来消除警告。

$kns_options[] = get_option(\'kns_products_options\');
(我不知道这是否是一个解决方案,但我在大量的谷歌搜索中找不到任何关于它的信息)

因此,警告消失后,我开始尝试通过我创建的表单添加选项,但这些选项只是不想保存。我试图var\\u转储变量,但结果为空。。有没有错别字,因为我肯定找不到!

我将在下面发布代码,请告诉我是否应该将其重新发布在粘贴箱或其他地方!

<?php
add_action( \'init\', \'kns_register_products_post_type\' );

function kns_register_products_post_type() {
    // Registrerar en custom post type som heter produkter
    register_post_type(\'produkter\',
    array(
        \'labels\' => 
            array(
                \'name\' => \'Produkter\',
                \'singular_name\' => \'Produkt\',
                \'add_new\' => \'Lägg till ny\',
                \'add_new_item\' => \'Lägg till ny Produkt\',
                \'edit_item\' => \'Ändra Produkt\',
                \'new_item\' => \'Ny Produkt\',
                \'view_item\' => \'Visa Produkt\',
                \'search_items\' => \'Sök Produkter\',
                \'not_found\' => \'Inga produkter hittades\',
                \'not_found_in_trash\' => \'Inga produkter hittades i papperskorgen\',
                \'parent_item_colon\' => \'Produkt Förälder:\',
                \'menu_name\' => \'Produkter\'
            ),
        \'public\' => true,
        \'supports\' => array(\'title\', \'editor\', \'thumbnail\'),
        \'taxonomies\' => array(\'category\'),
        \'menu_position\' => 20,
        )
    );

}

add_action( \'admin_menu\', \'kns_products_create_settings_submenu\' );

function kns_products_create_settings_submenu() {
    // Skapar sub menu för Produkter-fliken
    add_submenu_page(\'edit.php?post_type=produkter\', \'Inställningar\', \'Inställningar\', \'manage_options\', \'product_settings\', \'kns_products_settings_page\' );
    // Kallar på register_setting funktionen
    add_action( \'admin_init\', \'kns_products_register_settings\');
}

function kns_products_register_settings() {
    register_setting( \'kns_products_settings_group\', \'kns_products_options\', \'kns_sanitize_options\');
}

function kns_sanitize_options( $input ) {
    $input[\'option1\'] = sanitize_text_field( $input[\'option1\'] );
    $input[\'option2\'] = sanitize_text_field( $input[\'option2\'] );
}

function kns_products_settings_page() {
?>  
<div class="wrap">
<h2>Produktinställningar</h2>

<form method="post" action="options.php">
    <?php 
    settings_fields( \'kns_products_settings_group\' );
    $kns_options[] = get_option(\'kns_products_options\'); 
    var_dump($kns_options);
    ?>
    <table class="form-table">
    <h3>Utseende</h3>
        <tr valign="top">
            <th scope="row"><label for="option1">Blajja</label></th>
            <td>
                <input type="text" id="option1" name="kns_options[option1]" value="<?php echo esc_attr( $kns_options[\'option1\'] ); ?>" />
            </td>
        </tr>
        <tr valign="top">
            <th scope="row"><label for="option2">Annan Blajja</label></th>
            <td>
                <input type="text" id="option2" name="kns_options[option2]" value="<?php echo esc_attr( $kns_options[\'option2\'] ); ?>" />
            </td>
        </tr>
    </table>
    <p class="submit">
        <input type="submit" class="button-primary" value="Spara inställningar" />
    </p>

</form> 
</div>
<?php
}
?>
我真的需要帮助,我已经做了好几个小时了。。

编辑:

var\\u转储结果为

array(1) { [0]=> string(0) "" } 

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

您没有从清理功能返回数据:

function kns_sanitize_options( $input ) {
    $input[\'option1\'] = sanitize_text_field( $input[\'option1\'] );
    $input[\'option2\'] = sanitize_text_field( $input[\'option2\'] );
}
因此,没有什么可以挽救的。尝试:

function kns_sanitize_options( $input ) {
    $input[\'option1\'] = sanitize_text_field( $input[\'option1\'] );
    $input[\'option2\'] = sanitize_text_field( $input[\'option2\'] );
    return $input;
}
其次,您已将您的选项名称注册为kns_products_options

register_setting( \'kns_products_settings_group\', \'kns_products_options\', \'kns_sanitize_options\');
但您正在使用kns_options 在表单中。

<input type="text" id="option1" name="kns_options[option1]" //...
API不知道如何查找数据,所以$input 在您的清理回调中null. 使该名称属性与您注册的名称匹配。

<input type="text" id="option1" name="kns_products_options[option1]" //...

结束

相关推荐

使用jQuery删除存储在wp_Options中的数据

我想知道是否有人能就我的问题给我进一步的建议。我的插件的一部分存储了用于调试的日志文件。我已经使用jquery和wp\\u localise\\u脚本在我的管理页面的(div#log)中成功地显示了它们。我有一个删除这些日志的按钮,但我不确定如何处理。我觉得ajax可能会在这里派上用场,但不确定从哪里开始。以下是我的代码的相关部分:admin_enqueue_scripts (action) $args = array(get_option(\'wow_tweets_log\'));//log files