我正在开发一个自定义主题,基本上是将当前网站的外观迁移到WordPress中。大部分内容都是基于页面的,所有这些页面都应该有一个左侧边栏。在这些页面中,它们是以下三个页面之一:
页面是节的一部分,所以显示小部件中节的所有部分的列表。页面是节的一部分,所以显示小部件中节的所有部分的列表,但也有子项,所以在上面的单独小部件中显示这些页面页面不是节的一部分,因此没有兄弟或子页面我不想为#3中的页面制作单独的页面模板。目前,除了包含get_sidebar()
作用如果是这样的话,我想列出所有部分,这样我就有了一些东西。
我似乎找不到这方面的好例子。在所有的核心函数中,他们似乎在查看侧栏是否包含侧栏中可用的小部件,而不是实际呈现的小部件(除非我遗漏了什么)。我还尝试在小部件中设置一个变量并在页面上读取它,但这似乎也不起作用。
如果没有显示其他小部件,我如何有条件地显示额外的小部件?或者,如果我添加了这个小部件,如果其他小部件在同一个侧栏中呈现,则隐藏它?
Update: 当我声明“无显示”时,我的意思是小部件不会回显某些内容。例如,我的小部件获取要显示的内容列表。如果列表为空,我已经有了条件逻辑,它不会呈现(或回显任何内容)小部件。示例如下:
$subpages = wp_list_pages(\'title_li=&child_of=\'.$thisPageID.\'&echo=0&depth=1\');
if($subpages)
{
// I have subpages, so display them
echo $subpages;
}
else
{
// no subpages, doesn\'t echo anything.
}
如果它点击了else,没有任何渲染,我想知道是否有一些逻辑可以在侧边栏中使用,以知道我没有得到任何回复,然后渲染其他内容来代替它。
另一种看待它的方式是说我有一个默认的小部件,一个所有东西的列表。但是,如果我有任何其他内容要显示,我会隐藏默认小部件,并显示它。因此,每一页上都会有一些内容。
Update 2: 一位朋友提出了一个我以前没有想到的想法-这个小部件可以只使用与使其呈现前一个小部件的逻辑相反的逻辑,而不是依赖前一个小部件的输出。因此,由于这两个页面是互斥的,所以所有页面都将呈现它们应该呈现的内容。在这个简单的示例中,这将起作用。我仍然很好奇,是否有一种方法可以测试一个小部件是否有回声。
SO网友:infrcl
您可以使用Widget Logic 插件,用于测试小部件是否响应某些内容,并在需要时更改小部件内容。
安装后,它允许您使用“widget\\u content”过滤器。
然后,根据小部件的DOM树,您可以测试它是否有适当的节点:
function check_empty_widget($content=\'\' , $widget_id=\'\') {
if ($widget_id == "your-widget-id-1" || $widget_id == "your-widget-id-2" ) {
$htmldoc = new DOMDocument();
$htmldoc->loadHTML($content);
$tag=$htmldoc->getElementsByTagName(\'ul\')->item(0);
return $tag->hasChildNodes()? $content:\'\';
}
return $content;
}
add_filter(\'widget_content\', \'check_empty_widget\',10,2);
也可以使用正则表达式过滤内容。