2011-05-21 58 views
0

我有幾本書,我一直在關注這個。我做了我自己定製的WP主題,這很好,但是我決定我想讓右側邊欄成爲一個小部件區域,並將我的Twitter feed變成一個小部件,而不是將其硬編碼到模板中。我知道那裏有大量的twitter feed插件,但是我正在爲此體驗做這件事。Widgetizing主題,並創建自定義小部件插件

插件文件:

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()將始終爲真。我不明白你想用那個條件來檢查你的。也許你想檢查側欄是否與is_active_sidebar一起生效?

我不明白你爲什麼要在init行動之外致電register_sidebar


你的側邊欄的ID必須全部小寫,所以 'rightcolumn'。看到codex:http://codex.wordpress.org/Function_Reference/register_sidebar#Parameters

+0

這是有道理的,所以我改變它來檢查它是否是積極的,它永遠不會返回true。我修改了在函數內調用的register_sidebar動作。 正如我之前所說的,我沒有把任何東西放在小工具菜單中的邊欄中,因此我仍然無能爲力。 : -/ – user652650 2011-05-21 17:59:02

+0

@ user652650您的側邊欄ID實際上必須全部小寫,因此'rightcolumn'。 – 2011-05-21 18:31:40