GET_OPTION结果中是否有多个条目?或者,为什么将_Multiwidget设置为1?

时间:2013-12-10 作者:user9

我正在开发一个wordpress小部件,需要存储一些用户配置值,这就是为什么我要使用wordpress update\\u选项和get\\u选项。我是小部件开发新手。

我有一些小部件的配置选项,我需要从通过ajax调用的php函数访问这些选项,这就是为什么我使用options API(还有其他方法吗?)

我的代码如下(首先是小部件函数,然后是ajax处理函数):

public function update( $new_instance, $old_instance ) {

$instance = $old_instance;

$instance = array();
$instance[\'title\'] = ( ! empty( $new_instance[\'title\'] ) ) ? strip_tags( $new_instance[\'title\'] ) : \'\';
$instance[\'api_key\'] = ( ! empty ($new_instance[\'api_key\']) ) ? strip_tags ($new_instance[\'api_key\']) : \'\';
$instance[\'forum_key\'] = ( ! empty ($new_instance[\'forum_key\']) ) ? strip_tags ($new_instance[\'forum_key\']) : \'\';
$instance[\'limit\'] = ( ! empty ($new_instance[\'limit\']) ) ? strip_tags ($new_instance[\'limit\']) : \'\';

return $instance;

} // end widget


public function form( $instance ) {

$instance = wp_parse_args(
    (array) $instance
);

$title = ( isset ($instance[\'title\'] ) ) ? esc_attr($instance[\'title\']) : __( \'New title\', \'eedee-dq-widget\' );
$api_key = ( isset ($instance[\'api_key\'] ) ) ? esc_attr($instance[\'api_key\']) : \'\';
$forum_key = ( isset ( $instance [\'forum_key\'] ) ) ? esc_attr($instance[\'forum_key\']) : \'\' ;
$limit = ( isset ( $instance [\'limit\'] ) ) ? esc_attr($instance[\'limit\']) : 5 ;

// Display the admin form
include( plugin_dir_path(__FILE__) . \'/views/admin.php\' );

} // end form


public function handle_ajax_post() {

check_ajax_referer( \'my_nonce\', \'security\' );

if ($_SERVER[\'REQUEST_METHOD\'] == \'POST\') {

    $error = false;

    if ($error == false) {

$options = get_option(\'widget_my_comment_widget\');
...
一切正常(表单值保存,ajax调用php函数),唯一的问题是

$options = get_option(\'widget_my_comment_widget\');
返回如下数组

$options = array[3]
    $options[3] = array[4]
        $options[3][\'title\'] = (string) discussion
        $options[3][\'api_key\'] = (string) xxx
        $options[3][\'forum_key\'] = (string) zzz
        $options[3][\'limit\'] = (string) 5
    $options[4] = array[4]
        $options[4][\'title\'] = (string) New title
        $options[4][\'api_key\'] = (string) xxx
        $options[4][\'forum_key\'] = (string) yyy
        $options[4][\'limit\'] = (string) 5
    $options[\'_multiwidget\'] = (int) 1
因此,它返回多个小部件配置(为什么?我的侧边栏中只有一个小部件实例?因为我有多个主题?)。如何确保获得所需选项的正确id,或确保只有一组没有id键的选项?

Edit禁用插件、删除db条目、再次启用、再次添加小部件后,$选项如下所示:

$options = array[2]
    $options[2] = array[4]
        $options[2][\'title\'] = (string) discourse
        $options[2][\'api_key\'] = (string) xxx
        $options[2][\'forum_key\'] = (string) highcut
        $options[2][\'limit\'] = (string) 5
    $options[\'_multiwidget\'] = (int) 1
所以仍然有这个索引,我在google上搜索发现它与\\u multiwidget设置有关,但为什么会有呢?

Edit 2我的构造函数是

parent::__construct(
    \'my_comment_widget\',
    __( \'my Comment Widget\', \'eedee-my-widget\' ),
    array(
        \'description\'   =>  __( \'Displays recent and popular comments \', \'eedee-my-widget\' ), )
);
所以我没有使用名称空间(或者我是不愿意使用名称空间?)如中所述this 作为官方文档的一部分,我在google上找到了多个widget。

1 个回复
SO网友:user9

我找到了答案。

多窗口小部件是wordpress新窗口小部件API中一个很好的新特性。然而,关于如何使用它的文档很少。

$options = get_option( \'your_option_id\' );
if( isset($options) && isset($options[$this->number])) {
  //$this->number returns the unique widget id that corresponds to the database index
  $instance_options = $options[$this->number];
}
//now use $instance_options[\'setting\']

结束

相关推荐

"Widgets" menu doesn't appear

我正在开发一个WordPress主题,它在我的本地主机和一个live server上运行得很好,但在我的另一个live server上,小部件菜单(从外观)不会出现。是的,所有3台服务器都有相同的3.6.1 WordPress版本,主题文件也相同。知道这是什么原因吗?这是functions.php 注册小部件区域:if (function_exists(\'register_sidebar\')) { register_sidebar(array( \'name\' => \