Расширение темы и создание пользовательского плагина для виджетов

#php #widget #wordpress #wordpress-theming

#php #виджет #wordpress #wordpress-тематизация

Вопрос:

У меня есть несколько книг, которым я следил по этому поводу. Я создал свою собственную тему WP, которая отлично работает, однако я решил, что хочу сделать правую боковую панель областью виджета и превратить мой канал Twitter в виджет вместо того, чтобы жестко кодировать его в шаблоне. Я понимаю, что существует множество плагинов для твиттер-каналов, однако я делаю это для удобства.

Файл плагина:

 class sp_twitterWidget extends WP_Widget 
{
    function sp_twitterWidget()
    {
        parent::WP_Widget(false, $name = 'Custom Twitter Feed');
        return;
    }

    function widget($args, $instance)
    {
        extract($args);

        echo $before_widget;
            echo $before_title;
                echo $instance['title'];
            echo $after_title;

                $api_url = 'http://api.twitter.com/1/statuses/user_timeline.json?screen_name=';
                $twitter_data = file_get_contents($api_url);
                $twitter_data = json_decode($twitter_data);

                for ($i=1;$i<=3;$i  ):
                    echo '<p class="tweet">';
                    echo $twitter_data[$i]->text;
                    echo '<br /><span>';
                    echo date("F j", strtotime($twitter_data[$i]->created_at));
                    echo '</span></p>';
                endfor;

        echo $after_widget;

    }

    function update($new_instance, $old_instance)
    {
        return $new_instance;
    }

    function form($instance)
    {
        $theTitle = esc_attr($instance['title']);

        echo '<p>';
            echo '<label for="'.$this->get_field_id('title').'">
                  Title: <input class="widefat" id="'.$this->get_field_id('title').'" name="'.$this->get_field_name('title').'" type="text" value="'.$theTitle.'" />
                  </label>';
        echo '</p>';
    }    
}

add_action('widgets_init', create_function('', 'return register_widget("sp_twitterWidget");')); 
  

Регистрация боковой панели в качестве области виджетов:

 if (!function_exists('register_sidebar')) { register_sidebar(); }

function sp_rightSidebar()
{
    register_sidebar(array(
        'name'          => 'Right Sidebar',
        'id'            => 'rightColumn',
        'description'   => __('The widget area for the right sidebar', 'simplePortfolio'),
        'before_widget' => '<div id="%1$s" class="widget %2$s">',
        'after_widget'  => '</div>',
        'before_title'  => '<div class="rightHeading">',
        'after_title'   => '</div>'));    
}

add_action('init', 'sp_rightSidebar'); 
  

Файл темы боковой панели:

 <div id="rightColumn"> 
        <?php if (!function_exists('sp_rightSidebar') || !sp_rightSidebar()): ?>
        sp_rightSidebar is waiting.
        <?php else: ?>
        <?php dynamic_sidebar('sp_rightSidebar'); ?>
        <?php endif; ?>    
</div>
  

Что бы я ни делал, он всегда отображает «sp_rightSidebar ожидает на боковой панели», я тестировал свой плагин для виджетов с другими темами, и он отлично работает, так что это должно быть связано с моим файлом темы боковой панели / неправильной регистрацией боковой панели, я предполагаю. Область виджета «Правая боковая панель» отображается в области виджетов на панели администратора, однако все добавленное там не остается.

Я ненавижу быть парнем, который сбрасывает свой код, прося людей взглянуть, но если вы видите что-то, что может быть неправильным, я был бы признателен за ваш вклад.

Спасибо!

Ответ №1:

sp_rightSidebar функция ничего не возвращает, поэтому !sp_rightSidebar() всегда будет true. Я не понимаю, что вы пытаетесь проверить с помощью этого условия. Возможно, вы хотите проверить, активна ли боковая панель с is_active_sidebar ?

Я не понимаю, почему вы вызываете register_sidebar вне своего init действия.


Ваш идентификатор боковой панели должен быть полностью в нижнем регистре, поэтому ‘rightcolumn’. Смотрите кодекс:http://codex.wordpress.org/Function_Reference/register_sidebar#Parameters

Комментарии:

1. Это имеет смысл, поэтому я изменил его, чтобы проверить, был ли он активным, и он никогда не возвращает true. Я изменил действие register_sidebar для вызова внутри функции. Как я уже говорил ранее, ничего из того, что я помещал на боковую панель в меню виджетов, там не остается, поэтому я по-прежнему остаюсь в неведении. :-/

2. @user652650 Ваш идентификатор боковой панели на самом деле должен быть полностью в нижнем регистре, поэтому ‘rightcolumn’.