我正在开发的主题中有几个侧边栏。其中一些被设计为只容纳少数小部件类型。所以我想知道如何在不使用插件的情况下阻止其他小部件。
经过大量的谷歌搜索,我相信只有两种选择:
在widgets管理页面上使用jquery以防止拖动(&L);将某些小部件拖放到某些小部件区域。在一个完美的世界中,用户将看到某种消息,表示此特定小部件不允许在该特定小部件区域中使用使用wp“sidebars\\u widgets”过滤器删除服务器端的widgets首先听起来是一种更好的方式,主要是在性能方面。你觉得怎么样?虽然,我没有找到任何有效的解决方案,而且我的jquery知识还不够。遗憾的是,我的PHP知识显然还不足以确定第二个解决方案。以下是我所拥有的:
add_filter( \'sidebars_widgets\', \'wp150734_code_disable_widgets\' );
function wp150734_code_disable_widgets( $sidebars_widgets ) {
// This code works for one sidebar & one widget :
$allowed_widget = \'wp150734_widget_social\';
$sidebar_to_check = \'wp150734_widgets_navbar\';
// But I want to check the array of sidebars with allowed widgets:
$sidebars_to_check = array(
// allowed widgets in \'wp00734_widgets_navbar\'
\'wp150734_widgets_navbar\' => array(
\'widget_search\',
\'widget_text\',
\'wp150734_widget_social\'
),
// allowed widgets in \'wp00734_widgets_footer\'
\'wp00734_widgets_footer\' => array(
\'widget_search\',
\'widget_text\',
\'wp00734_widget_social\'
)
);
foreach ( $sidebars_widgets as $sidebars_key=>$sidebars_widget ) {
// Check if we even need to check this sidebar
if ( $sidebars_key != $sidebar_to_check )
continue;
if ( $sidebars_widget ) {
foreach ( $sidebars_widget as $k=>$v ) {
// Look for our custom widget and unset all other widgets from the $sidebars_widgets array
if ( stripos( $v, $allowed_widget ) === false ) {
unset( $sidebars_widgets[$sidebars_key][$k] );
}
}
}
}
return $sidebars_widgets;
};
你们觉得怎么样?我觉得jquery解决方案会更好,但找不到任何相关的。
编辑:除了所有标准外,我还有2-3个自定义小部件。我希望所有这些小部件在所有注册的小部件区域中正常工作。现在,我在主题中有一个顶部导航栏。它是用来保存一些数据的。如菜单、社交图标、搜索和文本等。由于我已经以可以重新排序的小部件的形式拥有了所有这些,因此在导航栏中注册一个自定义小部件区域并让用户选择小部件并重新排序似乎是一个合乎逻辑的想法。无需复制功能-小部件已经提供了现成的功能。唯一的问题是,并非所有小部件都设计为位于导航栏中。
最合适的回答,由SO网友:Mark Kaplun 整理而成
你想得太多了。小部件的概念被设计为可以在小部件区域(又名侧栏)之间进行转换。如果一个小部件不可传输,那么它就不是真正的wordpress小部件。
现在,创建自己的小部件框架听起来不是一个好主意。除了与wordpress核心代码作斗争外,您还将发现自己与既定的用户对小部件的期望作斗争。
因此,您基本上有两种选择,称之为“Baitar的边栏和小部件”,以向用户表明它们不是真正的wordpress小部件,并复制wordpress核心代码来管理它们。或者问问自己,为什么要编写不合标准的小部件,并修复设计和代码。
第三个,也可能是最简单的选择,就是让用户想做什么就做什么,让他自己看到小部件不工作。只需提供适当的文档即可。