2012-08-01 76 views
3

我想要做的是在主題激活中預先填充側欄小部件區域,並使用一些默認小部件。如何在主題激活時在側欄上填充小部件

if (! dynamic_sidebar('sidebar')) : 

不添加小部件,但它亙古不變的部件部分的側邊欄和

if (is_active_sidebar('sidebar')) { 

此功能亙古不變的工作,如果該部件沒有在側邊欄部件化的區域裝現身。

我知道這是可能的,但我只是出於主意。我GOOGLE了,但沒有找到任何解決方案。感謝您提前提供任何幫助。

回答

8

從您的答案中可以看出,如果您使用after_switch_theme鉤子,但是您需要設置小部件的那一刻。

要激活小部件,我建議將它直接寫入數據庫get_option('sidebars_widgets')應該給出一個數組,並將其保存爲update_option('sidebars_widgets', $new_activated_widgets)

這應該有助於您開始使用。

/** 
* set new widgets on theme activate 
* @param string $old_theme 
* @param WP_Theme $WP_theme 
*/ 
function set_default_theme_widgets ($old_theme, $WP_theme = null) { 
    // check if the new theme is your theme 
    // figure it out 
    var_dump($WP_theme); 

    // the name is (probably) the slug/id 
    $new_active_widgets = array (
     'sidebar-name' => array (
      'widget-name-1', 
      'widget-name-2', 
      'widget-name-3', 
     ), 
     'footer-sidebar' => array(
      'widget-name-1', 
      'widget-name-2', 
      'widget-name-3', 
     ) 
    ); 

    // save new widgets to DB 
    update_option('sidebars_widgets', $new_active_widgets); 
} 
add_action('after_switch_theme', 'set_default_theme_widgets', 10, 2); 

經過測試,只需將其粘貼到您的主題的functions.php即可。

+0

非常感謝您的回覆,但請您舉出一個完整的例子。我無法讓它工作。什麼應該是'$ new_activated_widgets'和它應該在哪裏被勾住?謝謝 – kcssm 2012-08-02 11:17:56

+0

@kcssm我用示例代碼更新了我的答案。你只需要弄清楚如何檢查它是你的主題。 – janw 2012-08-02 17:43:37

+0

謝謝@janw, 我從你的例子中得到了啓動器,然後我發現我們還需要更新小部件標題以及例如。 'update_option('widget_categories',array('title'=>'My Categories')); update_option('sidebars_widgets',array(「sidebar」=> array(「categories」)));' 再次感謝, Sanam – kcssm 2012-08-22 09:56:51

1

如果其他人需要知道如何將多個默認小部件(不同實例)同時添加到多個側邊欄,則以下代碼會將小部件添加到頁面和管理小部件選項卡下。我意識到這可能對除我以外的每個人都很明顯。

因此,基於janw和kcssm的辛苦:

function add_theme_widgets($old_theme, $WP_theme = null) { 

    $activate = array(
     'right-sidebar' => array(
      'recent-posts-1', 
      'categories-1', 
      'archives-1' 
     ), 
     'footer-sidebar' => array(
      'recent-posts-2', 
      'categories-2', 
      'archives-2' 
     ) 
    ); 

    /* the default titles will appear */ 
    update_option('widget_recent-posts', array(
     1 => array('title' => ''), 
     2 => array('title' => ''))); 

    update_option('widget_categories', array(
     1 => array('title' => ''), 
     2 => array('title' => ''))); 

    update_option('widget_archives', array(
     1 => array('title' => ''), 
     2 => array('title' => ''))); 

    update_option('sidebars_widgets', $activate); 
} 

add_action('after_switch_theme', 'add_theme_widgets', 10, 2); 

然而,這將刪除任何其他設置,因此謹慎行事!

相關問題