2011-05-21 10 views
0

私はこれに従っているいくつかの本を持っています。私は自分のカスタムWPテーマを作ったが、うまくいきましたが、右側のサイドバーをウィジェットエリアにして、テンプレートにハードコードするのではなく、ウィジェットをウィジェットに変えたいと決めました。私はそこにtwitterフィードプラグインがたくさんあることを理解していますが、私はその経験のためにこれをやっています。テーマをウィジェット化し、カスタムウィジェットプラグインを作成する

プラグインファイル:

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'); 

サイドバーのテーマファイル:ウィジェットエリアとしてサイドバーの登録

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");')); 

どんなに私は何をすべきか

<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の外に呼び出す理由を理解していません。


あなたのサイドバーIDはすべて小文字である必要がありますので、 'rightcolumn'です。コーデックスを参照してください:http://codex.wordpress.org/Function_Reference/register_sidebar#Parameters

+0

これは意味があるので、アクティブであるかどうかをチェックするために変更しました。関数内で呼び出されるregister_sidebarアクションを変更しました。 私が前に言ったように、ウィジェットメニューのサイドバーに置いたものは何もそこにとどまっていないので、私はまだ無知なままです。 : -/ – user652650

+0

@ user652650あなたのサイドバーIDは実際にはすべて小文字にする必要があるので、 'rightcolumn'です。 –

関連する問題