Wordpress自定义小部件记住多个选择选项
问题描述:
我正在为我们的网站编写一个自定义小部件来显示一些选定的帖子。在管理部分,我有一个多选框让管理员通过名字选择多个帖子。这工作正常,但是当我选择几个不同的帖子并保存时,没有任何东西被保存。Wordpress自定义小部件记住多个选择选项
任何人都可以对此有所了解吗?
这里是我的代码...
<?php
/*
Plugin Name: Hot Topics
Plugin URI: http://www.weddingideasmag.com
Description: Use this widget to choose an array of posts snippets to show
Version: 1.0)
Author: James Payne
Author URI: http://www.bluntcreative.co.uk
License: GPL2
*/
class HotTopics extends WP_Widget {
// constructor
function HotTopics() {
$widget_ops = array('name' => 'Hot Topics','classname' => 'widget-hot-topics', 'description' => __("Use this widget to choose an array of posts snippets to show in the sidebar."));
$this->WP_Widget('hottopics', __('Hot Topics'), $widget_ops);
}
// widget form creation
function form($instance) {
// Check values
if($instance) {
$select = esc_attr($instance['select']); // Added
} else {
$select ='';
}
?>
<select multiple="multiple" name="<?php echo $this->get_field_name('select'); ?>[]" id="<?php echo $this->get_field_id('select'); ?>" class="widefat" size="15" style="margin-bottom:15px;">
<?php
$args = array('offset'=> 1, 'orderby' => 'date', 'order' => 'DESC', 'posts_per_page' => 200, 'post_status' => 'publish');
// The Query
query_posts($args);
// The Loop
while (have_posts()) : the_post();
$title = get_the_title();
?>
<option value="<?php echo get_the_ID();?>" class="hot-topic" <?php $select == $title ? ' selected="selected"' : '';?> style="margin-bottom:3px;">
<?php echo $title;?>
</option>
<?php
endwhile;
// Reset Query
wp_reset_query();
?>
</select>
<?php
}
// update widget
function update($new_instance, $old_instance) {
$instance = $old_instance;
// Fields
$instance['select'] = strip_tags($new_instance['select']);
return $instance;
}
// widget display
function widget($args, $instance) {
/* ... */
echo 'tetst';
}
}
// register widget
add_action('widgets_init', create_function('', 'return register_widget("HotTopics");'));
?>
答
当小部件更新,strip_tags
正在摧毁选择职位的阵列。 A esc_sql
完成这项工作。另外,don't usequery_posts
。最后,存储帖子标题并不理想,因为它可能会改变,该ID是永久性的。
工作示例:
# PHP 5.3+ anonymous function
add_action('widgets_init', function() {
register_widget('Sample_Widget_SO_19246434');
});
class Sample_Widget_SO_19246434 extends WP_Widget
{
function Sample_Widget_SO_19246434()
{
$this->WP_Widget(
'hottopics',
__('Hot Topics'),
array(
'name' => 'Hot Topics',
'classname' => 'widget-hot-topics',
'description' => __("Description")
)
);
}
function form($instance)
{
if($instance)
$select = $instance['select'];
else
$select ='';
$get_posts = get_posts(array(
'offset'=> 1,
'orderby' => 'date',
'order' => 'DESC',
'posts_per_page' => 200,
'post_status' => 'publish'
));
if($get_posts)
{
printf(
'<select multiple="multiple" name="%s[]" id="%s" class="widefat" size="15">',
$this->get_field_name('select'),
$this->get_field_id('select')
);
foreach($get_posts as $post)
{
printf(
'<option value="%s" class="hot-topic" %s style="margin-bottom:3px;">%s</option>',
$post->ID,
in_array($post->ID, $select) ? 'selected="selected"' : '',
$post->post_title
);
}
echo '</select>';
}
else
echo 'No posts found :(';
}
function update($new_instance, $old_instance)
{
$instance = $old_instance;
$instance['select'] = esc_sql($new_instance['select']);
return $instance;
}
function widget($args, $instance)
{
echo 'Hello world';
}
}
相关:
•What's the difference between esc_* functions?
•How to sanitize user input?
你是一个传奇! –