Обновление виджетов WordPress до API без ущерба для старых - PullRequest
0 голосов
/ 21 февраля 2011

Раньше я создавал плагин для виджетов в твиттере, который использовал устаревшую версию:

register_sidebar_widget()

Я хочу обновить API виджетов из WordPress 2.8, но я также не хочу нарушать все существующие установки. Есть ли способ сообщить моему новому виджету, чтобы он извлекал настройки из старого виджета, если он существует?

Я провел некоторое тестирование, и похоже, что я могу временно перенести свои старые настройки, но у меня возникают проблемы с дублированием старого экземпляра виджета на боковой панели. Когда я загружаю новый код (даже если мои объекты названы одинаково), он вытаскивает старый виджет из боковой панели, и я должен добавить его снова.

Старый код:

// Run code and init
add_action('widgets_init', 'widget_reliabletwitter_init');

function widget_reliabletwitter_init() {
    // Register widget for use
    register_sidebar_widget(array('Reliable Twitter', 'widgets'), 'widget_reliabletwitter');

    // Register settings for use, 325x400 pixel form
    register_widget_control(array('Reliable Twitter', 'widgets'), 'widget_reliabletwitter_control', 325, 400);

Новый код:

add_action('widgets_init', 'reliable_twitter_load_widgets');

function reliable_twitter_load_widgets() {
    register_widget('Reliable_Twitter');
}


class Reliable_Twitter extends WP_Widget {

    /**
     * Widget setup.
     */
    function Reliable_Twitter() {
        /* Widget settings. */
        $widget_ops = array( 'classname' => 'widget_reliabletwitter', 'description' => __('Adds a sidebar widget to display Twitter updates and uses the more-reliable Google AJAX API.', 'widget_reliabletwitter') );

        /* Widget control settings. */
        $control_ops = array( 'width' => 325, 'height' => 400, 'id_base' => 'widget_reliabletwitter' );

        /* Create the widget. */
        $this->WP_Widget( 'widget_reliabletwitter', __('Reliable Twitter', 'widget_reliabletwitter'), $widget_ops, $control_ops );
    }

1 Ответ

1 голос
/ 25 марта 2011

Следуя вашему примеру, я обнаружил, что следующий код должен работать:

class Reliable_Twitter extends WP_Widget {

/**
 * Widget setup.
 */
function Reliable_Twitter() {
    /* Widget settings. */
    $widget_ops = array( 'classname' => 'widget_reliabletwitter', 'description' => __('Adds a sidebar widget to display Twitter updates and uses the more-reliable Google AJAX API.', 'widget_reliabletwitter') );

    /* Widget control settings. */
    $control_ops = array( 'width' => 325, 'height' => 400, 'id_base' => 'widget_reliabletwitter' );

    /* Create the widget. */
    $this->WP_Widget( 'widget_reliabletwitter', __('Reliable Twitter', 'widget_reliabletwitter'), $widget_ops, $control_ops );

/* Attempt upgrade from pre 2.8.4 widgets */
if ( $old_options = get_option('widget_reliabletwitter_control') ) {
    $old_options['_multiwidget'] = 1;
    update_option('widget_widget_reliabletwitter', $old_options);
    delete_option('widget_reliabletwitter_control');
}

}

... где я ссылаюсь на старые настройки с get_option ('widget_reliabletwitter_control') и delete_option ('widget_reliabletwitter_control')...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...