簡體   English   中英

Wordpress 基於頁面模板的“Widget Area”

[英]Swap Wordpress "Widget Area" based on Page Template

我在我的子主題頁腳中使用了 3 個小部件區域。

我成功創建了第二個自定義主題,希望我可以簡單地更改第二個主題中的那 3 個小部件區域。

頁腳 - 第 1 列”將更改為“ Alt 頁腳 - 第 1 列
頁腳 - 第 2 列”將更改為“ Alt 頁腳 - 第 2 列
頁腳 - 第 3 列”將更改為“ Alt 頁腳 - 第 3 列

(是的,我已經在 WP admin > Appearnace > Widgets 中創建了這 3 個新的自定義小部件區域,並暫時將臨時文本小部件放入其中)。

我在“functions.php”中使用它來更改“菜單”...

add_filter( 'wp_nav_menu_args', 'respect_menu_swap' );
function respect_menu_swap( $args = '' ) 
{
    if(is_page_template('template-respect.php') && $args['menu_id'] == 'avia-menu') 
    {
        $args['menu'] = '16';
    } 
    return $args;
}

...我希望有類似的東西來改變每個“小部件區域”。

我已經搜索、閱讀、搜索和閱讀了很多,試圖弄清楚這一點,但似乎無法理解 go 應該用什么來代替該代碼位中的菜單項。 我真的很糾結 PHP,所以非常感謝具體的解釋和代碼:-)

而且,我說的是“ Widget Area而不是Widgets ”,因為我意識到“Widgets”在“Widget Areas”內部 我想交換整個區域而不僅僅是小部件,這樣我的人就可以根據需要在 WP > 外觀 > 小部件管理頁面的這 3 個“區域”中添加/刪除各種小部件。 據我了解,如果我只使用“小部件 ID”,那么當有人更改其中一個小部件區域中的哪些小部件時,如果我不先更改這些 ID,它將不會在網站前端更新。 如果可能的話,我想避免這樣做。

(順便說一句:如果重要的話,我正在使用Enfold WP 主題)

哇,好吧,看來我想通了!

經過更多搜索,我遇到了https://learn.wordpress.org/lesson-plan/widget-areas

顯然我必須“注冊”一個“側邊欄”——通過我,因為我想在頁腳中修改。 在查找之后,術語“側邊欄”用於主題允許用戶添加小部件的任何地方。並且由於 Enfold 主題頁腳允許小部件,我不得不“register_sidebar”然后修改模板中的一行。 我也不明白為什么我必須“注冊”“小部件區域”,認為只需在 WP admin > Appearance > Widgets 中創建自定義小部件,就可以了,但是不行。 你必須在那里創建它們,並且還要在子函數中注冊它們。

所以在閱讀 wordpress 頁面(上面鏈接)后,我開始在主要的 Enfold 主題文件中尋找,試圖找到類似的東西。 因為顯然,有些東西的命名與其他主題不同,這就是為什么我在其他地方找到的示例的復制/粘貼不起作用。 我在... themes > enfold > includes > admin > register-widget-area.php中找到了它

所以我結合了 wordpress 鏈接提供的頁腳小部件注冊,並想出了我放在我的子函數中的代碼。php ...

add_action( 'widgets_init', 'MYWIDGETAREA' );
function MYWIDGETAREA() 
{
    register_sidebar( array(
        'name'          => 'Respect Footer - Column ' . $i,
        'id'            => 'espect_foot_widget_' . $i,
        'before_widget' => '<section id="%1$s" class="widget clearfix %2$s">',
        'after_widget'  => '<span class="seperator extralight-border"></span></section>',
        'before_title'  => '<h3 class="widgettitle">',
        'after_title'   => '</h3>'
    ));
}

在數組中,我只更改了“名稱”和“ID”,留下了 rest,因此結構與原始主題相匹配。

然后我去了我的模板-custom.php並找到了這一行......

if( ! ( function_exists( 'dynamic_sidebar' ) && dynamic_sidebar( 'Footer - Column ' . $i ) ) )

...並將其替換為...

if( ! ( function_exists( 'dynamic_sidebar' ) && dynamic_sidebar( 'Respect Footer - Column ' . $i ) ) )

驚人的!!!

好吧,希望有一天所有這些都可以使類似的 position 中的其他人受益。

如果您只想為每個頁面模板使用不同的小部件區域,您可以為每個頁面模板注冊一個小部件區域,因為頁面模板會包含它。

但是,如果您在多個頁面模板上使用相同的頁腳文件並希望動態加載不同的小部件區域,您首先必須使用 ID 中包含的頁面模板 slugs 注冊小部件區域,例如:

function custom_register_widget_area() {
    register_sidebar( array(
        'name'          => 'Template Respect Footer',
        'id'            => 'template-respect-footer',
        'before_widget' => '<div class="widget">',
        'after_widget'  => '</div>',
        'before_title'  => '<h2 class="widget-title">',
        'after_title'   => '</h2>',
    ) );
}
add_action( 'widgets_init', 'custom_register_widget_area' );

為每個模板添加另一個register_sidebar()

然后在頁腳文件中(使用示例中的template-respect.php ),您可以獲得模板的基本名稱以構建小部件區域 ID:

$template = basename( get_page_template_slug( get_the_id() ), '.php' );

if ( $template && is_active_sidebar( $template . '-footer' ) ) {
    dynamic_sidebar( $template . '-footer' );
} elseif ( is_active_sidebar( 'default-footer' ) ) {
    dynamic_sidebar( 'default-footer' );
}

這將加載與頁面模板 slug 匹配的任何小部件區域,或者如果使用默認 page.php 則加載默認區域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM