我正在开发一个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。