根据当前高级自定义域选项在仪表板中显示/隐藏小部件

时间:2017-01-03 作者:AlonsoF1

因此,为了推进我的新项目,我正在寻找一种注册和取消注册小部件区域的方法,这取决于我通过ACF Pro在选项页面中加载的头文件。

让大家了解一些信息:我正在使用ACF Pro(Advanced Custom Fields Pro)来选择和调用标题布局。例如:在下拉列表中选择“Black”将调用标题Black。php,并在保存我的选择时全局应用为网站标题。

我现在想弄清楚的是,如何注册所选标题专用的小部件(如“黑色”),并使标题“黑色”小部件作为唯一可用的标题小部件出现在小部件管理页面中。

示例:选择标题样式“黑色”,其中有两个小部件区域(标题黑色小部件右侧和标题黑色小部件左侧),这些区域成为小部件管理页面中唯一可用的两个标题小部件。

例如,在我的第一个emaple中,我选择了标题样式“Black”ok,所以现在我想换一个名为“Slim”的不同标题布局。现在,我选择了标题样式“Slim”,其中有三个小部件区域(标题Slim小部件1、标题Slim小部件2、标题Slim小部件3),在保存了我对标题的选择后,“黑色”标题样式的两个小部件消失了,取而代之的是标题样式“Slim”的三个小部件区域。

我仔细研究了几个小时,在这里发现了另一个问题,这类问题涉及到我想要实现的目标,但我仍然不太清楚如何正确执行它,因为给出的答案已被编辑/更新,这只会增加我的困惑。

这是我在这里找到的另一个线程的链接:How Can I Register Menus and Widgets Conditionally Based on Theme Options/Settings?

希望你们能帮我把这笔交易搞清楚。

新年快乐!射线

1 个回复
SO网友:Michael Ecklund

你很幸运。我其实是在找借口在我的一个项目上这样做。我终于花时间把这个想法添加到我的一个主题中

你可以接受这个想法并付诸实践。这是一个非常简单的例子,但它做了您希望它做的事情。

这不包括主题选项。这假设您已经以某种方式管理了主题设置(听起来像是这样)。

Step 1 - Tell WordPress about "Widget Areas" supported by your theme.

if ( ! function_exists( \'mbe_theme_register_widget_areas\' ) ) {

    /**
     * This function tells WordPress that your theme supports up to 4 Widget Areas:
     * 1.) Header Column 1
     * 2.) Header Column 2
     * 3.) Header Column 3
     * 4.) Header Column 4
     *
     * Allows Widgets to be placed in various places within the theme header.
     *
     * @author Michael Ecklund
     * @author_url http://www.michaelbrentecklund.com/
     *
     * @return bool
     */
    function mbe_theme_register_widget_areas() {

        $widget_areas = array();

        $widget_areas[] = array(
            \'name\' => \'Header Column 1\',
            \'id\'   => \'mbe-theme-widget-area-header-column-1\'
        );

        $widget_areas[] = array(
            \'name\' => \'Header Column 2\',
            \'id\'   => \'mbe-theme-widget-area-header-column-2\'
        );

        $widget_areas[] = array(
            \'name\' => \'Header Column 3\',
            \'id\'   => \'mbe-theme-widget-area-header-column-3\'
        );

        $widget_areas[] = array(
            \'name\' => \'Header Column 4\',
            \'id\'   => \'mbe-theme-widget-area-header-column-4\'
        );

        foreach ( $widget_areas as $widget_area ) {

            $default_args = array(
                \'before_widget\' => \'<div id="%1$s" class="widget mbe-theme-widget %2$s">\',
                \'after_widget\'  => \'</div><!-- end .mbe-theme-widget -->\',
                \'before_title\'  => \'<div class="mbe-theme-widget-title">\',
                \'after_title\'   => \'</div><!-- end .mbe-theme-widget-title -->\'
            );

            $args = wp_parse_args( $widget_area, $default_args );

            register_sidebar( $args );

        }

        return true;

    }

    add_action( \'widgets_init\', \'mbe_theme_register_widget_areas\' );

}
以上代码应该粘贴到当前活动的WordPress主题中functions.php 文件

Step 2 - Create the template files for each type of header.

在本例中,您需要在当前活动WordPress主题的根目录中创建4个新模板文件:

  1. header-column-1.php
  2. header-column-2.php
  3. header-column-3.php
  4. header-column-4.php

Step 3 - Make each new header template file widget ready.

在本例中,我将演示一个4列标题模板(header-column-4.php):

<?php


# BoF Header Column 1
echo \'<section class="col-lg-3">\' . PHP_EOL;

if ( is_active_sidebar( \'mbe-theme-widget-area-header-column-1\' ) ) {

    // Display Widgets
    dynamic_sidebar( \'mbe-theme-widget-area-header-column-1\' );

} else {

    // No Widgets, display default fallback markup.
    echo \'Default Column #1\' . PHP_EOL;

}

echo \'</section><!-- end .col-lg-3 -->\' . PHP_EOL;
# EoF Header Column 1


# BoF Header Column 2
echo \'<section class="col-lg-3">\' . PHP_EOL;

if ( is_active_sidebar( \'mbe-theme-widget-area-header-column-2\' ) ) {

    // Display Widgets
    dynamic_sidebar( \'mbe-theme-widget-area-header-column-2\' );

} else {

    // No Widgets, display default fallback markup.
    echo \'Default Column #2\' . PHP_EOL;

}

echo \'</section><!-- end .col-lg-3 -->\' . PHP_EOL;
# EoF Header Column 2


# BoF Header Column 3
echo \'<section class="col-lg-3">\' . PHP_EOL;

if ( is_active_sidebar( \'mbe-theme-widget-area-header-column-3\' ) ) {

    // Display Widgets
    dynamic_sidebar( \'mbe-theme-widget-area-header-column-3\' );

} else {

    // No Widgets, display default fallback markup.
    echo \'Default Column #3\' . PHP_EOL;

}
echo \'</section><!-- end .col-lg-3 -->\' . PHP_EOL;
# EoF Header Column 3


# BoF Header Column 4
echo \'<section class="col-lg-3">\' . PHP_EOL;

if ( is_active_sidebar( \'mbe-theme-widget-area-header-column-4\' ) ) {

    // Display Widgets
    dynamic_sidebar( \'mbe-theme-widget-area-header-column-4\' );

} else {

    // No Widgets, display default fallback markup.
    echo \'Default Column #4\' . PHP_EOL;

}

echo \'</section><!-- end .col-lg-3 -->\' . PHP_EOL;
# EoF Header Column 4


echo \'<div class="clearfix"></div>\' . PHP_EOL;

?>

Step 4 - Edit header.php in your currently active theme to activate dynamic header output.

<?php

echo \'<section class="container">\' . PHP_EOL;
echo \'<section class="row">\' . PHP_EOL;

$header_template = get_option( \'mbe-theme-header-template\' ); // Retrieve theme option configured by user.

if ( ! $header_template ) {
    $header_template = \'column-3\'; // Fallback: Set a default header template.
}

get_template_part( \'header\', $header_template );// Load the header template.

echo \'</section><!-- end .row -->\' . PHP_EOL;
echo \'</section><!-- end .container -->\' . PHP_EOL;

?>

相关推荐

functions php file

好的,我正在编辑我的函数。Wordpress中的php文件(关于我的子主题),我删除了一行代码(在删除之前我复制了代码)。这导致了白色的死亡屏幕,所以我简单地粘贴回我删除的代码(是的,我将它粘贴回我删除它的位置),但我仍然有白色的死亡屏幕。我已经完成了这些功能。我上周完成的一个备份中的php文件(功能齐全),并通过FTP将其上载到正确的文件夹,但没有任何效果。我已经尝试再次激活父主题,并创建了另一个子主题,以便比较这两个功能。php文件(将全新的、有效的子主题与不再工作的原始子主题进行比较),代码看起来是