小部件区域的Wordpress add_filter条件

时间:2016-12-13 18:03:01

标签: php wordpress

我为image widget添加了一个自定义模板,该模板在functions.php中定义:

myappService.callBancor = function (credentials, actionUrl) {
            var reqq = $http({
                url: "http://localhost/NewBancorScanner/api/" + actionUrl,
                method: "GET",
                contentType: "application/json",
                headers: {
                    'Access-Control-Allow-Origin': '*',
                    'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT',
                    'Access-Control-Allow-Headers': 'Origin, X-Requested-With, Content-Type, Accept'
                }
            });
            return reqq;
        };

此模板的内容(image-widget-custom.php)如下所示:

add_filter('sp_template_image-widget_widget.php','my_template_filter');
 function my_template_filter($template) {
 return get_template_directory() . '/widget-templates/image-widget-custom.php';
}

唯一的问题是,我希望为特定的小部件区域格式化小部件,而不是在wordpress网站上使用它的任何地方。我想要应用模板的区域在页脚中:

<?php
/**
 * Widget template. This template can be overriden using the  "sp_template_image-widget_widget.php" filter.
      * See the readme.txt file for more info.
      */

 // Block direct requests
 if ( !defined('ABSPATH') )
    die('-1');

 echo '<div class="col-sm-3 footer-blocks">';

 echo $before_widget;

 $output = "";
 $output .= '<a href="' . $instance[link] . '">';
 $output .= '<div class="hover-wrapper">';
 $output .= '<div class="hover-inner">';
 $output .= '<div class="hover-border">';
 $output .= '<h2 class="text-uppercase">' . $instance[title] . '</h2>';
 $output .= '</div>';
 $output .= '</div>';
 $output .= '<img class="img-responsive" src="' . $instance[imageurl] . '" alt="Footer image">';
 $output .= '</div>';
 $output .= '</a>';

echo $output;


echo $after_widget;

echo '</div>';
?>

这可能吗?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。

一种方法 - 假设您可以修改主题模板文件 - 是在侧边栏调用之前添加过滤器,然后在侧边栏调用之后删除过滤器

删除主题文件中的add_filter,然后修改代码,如下所示:

 <?php 
    // Add the filter just before the sidebar is called
    add_filter('sp_template_image-widget_widget.php','my_template_filter');
    // Call the sidebar, which will use your custom template
    dynamic_sidebar( 'footer-blocks' );
    // Remove the filter to ensure any other sidebars do not use custom template
    remove_filter('sp_template_image-widget_widget.php','my_template_filter');
 ?> 

请注意,remove_filter将确保不会使用您的自定义模板过滤对窗口小部件的任何其他调用。

替代方法(首选/更好):

更多&#34; WordPress方式&#34;这样做是为了利用dynamic_sidebar_beforedynamic_sidebar_after函数,这样做可以检查正在加载哪个侧边栏,并且只为正确的侧边栏添加过滤器(S)。这段代码将放在你主题的functions.php文件中:

add_action( 'dynamic_sidebar_before', 'my_sidebar_checker', 10, 2);
add_action( 'dynamic_sidebar_after', 'my_sidebar_checker_after', 10, 2);

function my_sidebar_checker( $index, $bool ) {
    if ( 'footer-blocks' == $index ) {
        // Add the filter just before the sidebar is called
        add_filter('sp_template_image-widget_widget.php','my_template_filter');
    }
}

function my_sidebar_checker_after( $index, $bool ) {
    if ( 'footer-blocks' == $index ) {
        // Remove the filter to ensure any other sidebars do not use custom template
        remove_filter('sp_template_image-widget_widget.php','my_template_filter');
    }
}