首先,尝试处理代码格式。事实上,它很难阅读,这不仅让我们更难理解如何帮助您,而且也不太容易扩展,不适合将来使用。始终尝试遵守WordPress PHP Coding 标准。
现在,让我们来谈谈问题的症结所在。。。
要向小部件添加新设置,必须在现有类的两类方法中实现功能:form()
和update()
. 在里面form()
, 我们将显示post下拉列表update()
, 我们将保存选定的帖子。
显示下拉列表
要显示下拉列表,我们使用
WP_Query
, 它创建一个用于获取所有帖子的查询。我们将此代码放置在
form
在实际显示任何内容之前。下面的代码获取所有(
posts_per_page=1
) 来自帖子类型的帖子和页面(
post_type=post,page
), 按标题排序(
orderby=post_title
) 上升的(
order=ASC
). 生成的帖子存储在属性中
$posts_query->posts
.
$posts_query = new WP_Query( array(
\'post_type\' => array( \'post\', \'page\' ), // Replace by your posts types for event type 1 and 2
\'posts_per_page\' => -1,
\'orderby\' => \'post_title\',
\'order\' => \'ASC\'
) );
接下来,我们在
form()
方法,只需在找到的帖子上循环。
<p>
<label for="<?php echo $this->get_field_id( \'post\' ); ?>"><?php _e( \'Post\' ); ?></label>
<select name="<?php echo $this->get_field_name( \'post\' ); ?>" id="<?php echo $this->get_field_id( \'post\' ); ?>" class="widefat">
<?php foreach ( $posts_query->posts as $post ) : ?>
<option value="<?php echo $post->ID; ?>" <?php selected( $post->ID, $instance[\'post\'] ); ?>>
<?php echo $post->post_title; ?>
</option>
<?php endforeach; ?>
</select>
</p>
试着理解上面的代码,因为您将来需要它来创建更多的小部件选项!
现在,我们使用update()
方法在有人保存小部件时保存所选帖子。为此,只需在$instance
已返回。
$instance[\'post\'] = $new_instance[\'post\'];
这会将新帖子添加到将用于更新实例的实例数组中。
这应该足够了
。。在路上帮助你。祝您在小部件中显示帖子好运!