小部件表单中的WP_DROPDOWN_PAGES

时间:2014-04-16 作者:AlxVallejo

我的widget表单中有一个小怪癖。保存小部件实例后,表单将使用从wp\\u下拉菜单中选择的错误“page\\u id”进行刷新。如果我刷新widgets页面,则在下拉列表中选择正确的保存的page\\u id。以下是代码部分:

public function form( $instance ) {
    if( isset( $instance[\'page_id\'] ) ) {
        $page_id = $instance[\'page_id\'];
    } else {
        $page_id = 0;
    }
    ?>
    <p class="description">Select a post to display it\'s excerpt</p>
    <?php
    $args = array(
        \'id\' => $this->get_field_id(\'page_id\'),
        \'name\' => $this->get_field_name(\'page_id\'),
        \'selected\' => $page_id
    );
    wp_dropdown_pages( $args );
}

public function update( $new_instance, $old_instance ) {
    $instance = array();
    $instance[\'page_id\'] = ( !empty( $new_instance[\'page_id\'] ) ) ? (int)$instance[\'page_id\'] : \'\';
    return $instance;
}
因此,当我单击“保存”时,error\\u logging$page\\u id将输出0,但如果我刷新,$page\\u id将是我需要的正确页面id。

有什么想法吗?

1 个回复
SO网友:AlxVallejo

我不知道为什么,但将更新功能更改为以下功能似乎可以做到这一点:

public function update( $new_instance, $old_instance ) {
    $instance = $old_instance;
    if( isset( $new_instance[\'page_id\'] ) ) {
        if( $new_instance == \'\' ) {
            $instance[\'page_id\'] = \'\';
        } else if ( (int) $new_instance[\'page_id\'] > 0 ) {
            $instance[\'page_id\'] = (int) $new_instance[\'page_id\'];
        }
    }
    return $instance;
}

结束

相关推荐

Individual Widgets per Page

在我的Wordpress网站(仅限于页面,无帖子)中,我需要在侧边栏中放置一些静态blob。我们可以将这些“blob”称为小部件。至少他们会有一个固定的html内容,如“摘要1”、“摘要2”、“免责声明”、“foo策略”。。。我需要的是,在每一页上都有不同的安排。因此,这不仅仅是“单一”对“归档”,而是真正的“产品页面A”对“产品页面B”对“关于我们”对“服务条款”。。。我在考虑自定义元框,以便在单个编辑器页面上打开和关闭它们wp-admin/post.php?post=196&action=ed