Widget Logic – WordPress plugin WordPress插件下载

点击下载

小部件逻辑

插件描述

此插件为每个小部件提供一个名为“小部件逻辑”的额外控制字段,可让您控制页面小部件将出现在。文本字段允许您使用WP的条件标记或任何常规PHP代码。

请注意您引入的小部件逻辑是直接EVAL。任何有权编辑小部件外观的人都有权添加任何代码,包括恶意和可能具有破坏性的功能。有一个可选的过滤器’widget_logic_eval_override’,您可以根据需要使用自己的代码绕过EVAL。 (参见其他注释)。

还可以选择添加wordpress“widget_content”过滤器 – 这使您可以调整任何窗口小部件的HTML以适合您的主题,而无需编辑插件和核心代码。

捐款

如果您喜欢并使用Widget Logic,您可以考虑向英国癌症研究中心捐赠一笔捐款。我有一个 JustGiving.com捐款链接。截至2017年2月,我们已经筹集了1,048.50 UKP。

编写逻辑代码

“窗口小部件逻辑”字段中的文本可以是完整的PHP代码,当您需要显示窗口小部件时,应返回“true”。如果文本中没有“返回”,则在开头添加隐式“返回”,并在结尾添加“;”。 (这只是为了让像is_home()这样的单个语句更方便。)

基础知识

充分利用 WP自己的条件标签。您可以使用以下方法更改和组合代码:

(NOT)至反转逻辑,例如!is_home()当为非主页时为TRUE。 || (OR)至组合条件。当X为真或Y为真时, X OR Y 为TRUE。 && (AND)使条件更具体。当X均为真且Y为真时, X和Y 为TRUE。

WP论坛上和网上的WP站点上有很多很棒的代码示例。但WP Codex也充满了适应的好例子,例如测试帖子是否属于后代类别

示例

is_home() – 只是主要博客页面!is_page('about') – 除了这个特定的WP’页面’之外的任何地方!is_user_logged_in() – 当用户未登录时显示 is_category(array(5,9,10,11)) – 其中一个给定类别ID的类别页面 is_single( )&& in_category('baked-goods') – 该帖子中的单个帖子 current_user_can('level_10') – 仅限admin strpos($ _ SERVER ['HTTP_REFERER'], “google.com”)!= false – 点击谷歌搜索时显示的小部件 is_category()&& in_array($ cat,get_term_children(5,'category')) – 类别页面,它是类别5 全球$ post的后代; return(in_array(77,get_post_ancestors($ post))); – WP页面是第77页的孩子 global $ post; return(is_page('home')||($ post-> post_parent ==“13”)); – 主页或第13页的孩子的页面

注意在有明确“返回”的一端的额外“;”。

‘widget_logic_eval_override’过滤器

在为每个窗口小部件评估窗口小部件逻辑代码之前,窗口小部件逻辑代码的文本将通过此过滤器传递。如果过滤器返回BOOLEAN结果,而是用于确定窗口小部件是否可见。返回TRUE表示可见。

‘widget_content’过滤器

当此选项处于活动状态时(勾选小部件管理页面底部的选项复选框),您可以修改任何小部件显示的文本,从您自己的主题功能.php文件。使用以下内容进入过滤器:

  add_filter('widget_content','your_filter_function',[priority],2);  

其中 [priority] add_filter 功能的可选优先级参数。过滤器函数可以采用第二个参数(如果你提供最后一个参数’2’),如下所示:

 函数your_filter_function($ content ='',$ widget_id ='') 

如果需要,第二个参数($ widget_id)可用于定位特定小部件。

WordPress过滤器函数‘将未修改的数据作为输入,并返回已修改的数据’,这意味着widget_content过滤器随窗口小部件的原始HTML输出一起提供,然后您将自由完全返回其他内容:

示例过滤器

  add_filter('widget_content','basic_widget_content_filter'); function basic_widget_content_filter($ content =''){return $ content。“< ; PRE>这出现在每个WIDGET之后< / PRE>“;}  

我有动力制作这个过滤器,以便使用优秀的 ttftitles插件来渲染所有小部件标题这个:

  add_filter('widget_content','ttftext_widget_title'); function ttftext_widget_title($ content =''){preg_match(“/< h2 [^>] *>([^ <] +)/“,$ content,$ matches); $标题= $匹配[1]; $ insert_img = the_ttftext($ heading,false); $含量= preg_replace函数( “/(小于H2 [^>] *>)[^<] + /”, “$ 1 $ insert_img”,$内容,1);return $ content;}  

人们经常会想办法让小部件交替使用样式。此过滤器将widget_style_a / widget_style_b插入到通常位于小部件主要定义中的class =“widget …”文本中:

  add_filter('widget_content','make_alternating_widget_styles'); function make_alternating_widget_styles($ content =' '){global $ wl_make_alt_ws; $ wl_make_alt_ws =($ wl_make_alt_ws == “style_a”) “style_b”?: “style_a”; return preg_replace('/(class =“widget)/',”$ 1 widget _ $ {wl_make_alt_ws}“,$ content);}  

屏幕截图

标准窗口小部件中的“窗口小部件逻辑”字段。
插件选项位于常用窗口小部件的底部管理页面… widget_content 过滤器, wp_reset_query 选项,’加载逻辑点’和’评估多次’。您还可以将站点的WL选项导出和导入为纯文本文件快速备份/恢复并帮助解决问题。

安装

上传 widget-logic.php / wp-content / plugins / 目录通过WordPress的“插件”菜单激活插件就是这样。配置和选项都在通常的小部件管理界面中。

配置

除了针对你的小部件的逻辑,还有三个选择离子添加到小部件管理页面的底部(参见屏幕截图)。

添加’widget_content’过滤器 – 这允许您修改所有窗口小部件中的文本输出。您需要知道如何编写WP过滤器,但其他注释中介绍了一些基本知识。

使用’wp_reset_query’修复 – WP的许多功能,以及那里的许多主题和插件,可能会混乱条件标记,例如is_home是NOT在主页上是真的。这通常可以在调用窗口小部件之前使用快速wp_reset_query()语句修复,并且此选项为您提供,而不必诉诸代码编辑

加载逻辑 – 此选项允许您设置首次检查时,您的窗口小部件逻辑的页面加载点。在v.50之前,当’wp_head’触发器发生时,即在创建HTML的HEAD块期间。很多主题都没有调用wp_head,这是一个问题。从v.50开始,默认情况下,它会尽可能早地发生,即插件加载时。您现在可以指定这些’后期加载’点(按时间顺序):

主题加载后(after_setup_theme触发器)当所有PHP加载(wp_loaded触发器)后查询变量设置(parse_query) – 这是defaultduring页眉( wp_head trigger)

如果你的逻辑依赖于定义的函数,你可能需要延迟加载,例如在theme functions.php文件中。相反,您可能需要提前加载,以便正确计算窗口小部件计数,例如,当侧边栏没有窗口小部件时显示替代的布局或内容。

不缓存小部件逻辑结果 – 从v.58开始,小部件逻辑代码应该只执行一次,但这可能会导致某些主题出现意外结果,因此此选项可以关闭此行为。 (每次调用sidebars_widgets过滤器时,都会评估代码的真/假。

FAQ

安装说明上载 widget-logic.php / wp- content / plugins / 目录通过WordPress的“插件”菜单激活插件就是这样。配置和选项都在通常的小部件管理界面中。

配置

除了针对小部件的逻辑,还有有三个选项添加到小部件管理页面的底部(参见屏幕截图)。

添加’小工具_内容’过滤器 – 允许您修改所有小部件中的文本输出。您需要知道如何编写WP过滤器,但其他注释中介绍了一些基本知识。

使用’wp_reset_query’修复 – WP的许多功能,以及那里的许多主题和插件,可能会混乱条件标记,因此主页上的is_home不正确。这通常可以在调用窗口小部件之前使用快速wp_reset_query()语句修复,并且此选项为您提供,而不必诉诸代码编辑

加载逻辑 – 此选项允许您设置首次检查时,您的窗口小部件逻辑的页面加载点。在v.50之前,当’wp_head’触发器发生时,即在创建HTML的HEAD块期间。很多主题都没有调用wp_head,这是一个问题。从v.50开始,默认情况下,它会尽可能早地发生,即插件加载时。您现在可以指定这些’后期加载’点(按时间顺序):

主题加载后(after_setup_theme触发器)当所有PHP加载(wp_loaded触发器)后查询变量设置(parse_query) – 这是defaultduring页眉( wp_head trigger)

如果你的逻辑依赖于定义的函数,你可能需要延迟加载,例如在theme functions.php文件中。相反,您可能需要提前加载,以便正确计算窗口小部件计数,例如,当侧边栏没有窗口小部件时显示替代的布局或内容。

不缓存小部件逻辑结果 – 从v.58开始,小部件逻辑代码应该只执行一次,但这可能会导致某些主题出现意外结果,因此此选项可以关闭此行为。 (每次调用sidebars_widgets过滤器时,都会评估代码的真/假。

我升级到版本5.7.0,我的网站的小部件现在表现不同ly

对Widget Logic代码的评估方式进行了重大更改。在查询变量设置之后有一个新的默认“加载逻辑”点。对于大多数人来说,这应该会更好,但你可以尝试恢复到“插件启动时”的旧默认值。

如果它不起作用,我可以尝试什么?切换到默认主题。如果问题消失,您的主题可能会干扰WP条件标记或小部件如何工作尝试 wp_reset_query 选项。如果您的主题在调用动态侧边栏之前执行自定义查询,这可能有所帮助。尝试不同的“加载逻辑”点。大多数wordpress条件标签仅在“查询变量设置之后”工作,但是某些插件可能需要更早或更晚地进行评估。如果必须使用早期的“加载逻辑”点,则可能需要“多次评估小组件逻辑”选项。我得到的错误就像“PHP Parse错误…… eval()’代码在第1行”

你的小部件的Widget Logic字段中有一个PHP语法错误。检查它们是否有错误。您可能会发现最简单的方法是使用“导出选项”并在那里读取代码(虽然请注意,单引号和双引号会使用多个反斜杠字符进行转义。)

如果您在查找语法错误时遇到问题一个简单的故障排除方法是使用“导出选项”来保留副本,然后依次清空每个Widget Logic字段,直到问题出现。一旦确定了有问题的代码,就可以使用“导入选项”恢复其余代码。

这会导致Woo Commerce /其他流行插件出现问题

通常,并非总是通过尝试不同的“加载逻辑”选项来解决这个问题。 “查询后变量集”选项看起来可能是更好的默认值,请尝试一下。

W当没有小部件时,帽子是我的侧边栏中的东西?

从v.50开始,小部件逻辑代码运行,以便在主题代码中调用dynamic_sidebar时,如果不存在小部件,它将“返回false”。在这种情况下,许多主题被编码为放置一些默认的侧边栏文本来代替小部件,这就是你所看到的。

如果您希望此默认侧边栏内容消失,您的选项是编辑主题,或作为解决方法,在侧边栏的小部件末尾添加一个空文本小部件(无标题,无内容)名单。

如何在我的“主页”页面上获取小部件X? (或在除此之外的每个页面上。)

主页面和首页之间存在一些混淆。如果您想要“首页”上的小部件,无论是静态页面还是一组帖子,请使用is_front_page()。如果是使用is_page(x)的页面不起作用。如果您的“首页”是一个页面而不是一系列帖子,您仍然可以使用is_home()在主帖子页面上获取小部件(如管理员>设置>阅读中所定义)。

逻辑使用is_page()不起作用

我相信这是在5.7.0中修复的。如果情况不是这样,请告诉我。

如果您的主题在循环后调用侧边栏,您应该会发现wp_reset_query选项修复了一些问题。在 is_page codex页面上解释了此问题。

如何让窗口小部件显示在类别页面和该类别中的单个帖子上?

小心使用条件标签。有 in_category is_category 标记。一个用于判断“当前”帖子是否属于某个类别,另一个用于判断该页面是否显示该类别的IS(标签等相同)。你想要的是这样的情况:

 (这个页面是IS类别X)或者(这是一个帖子和这个post是IN类X) 

,在适当的PHP中是:

  is_category(X)|| (is_single()&& in_category(X)) 

如何在X,Y和Z时显示小部件?

先自己动手。查看其他注释下的“编写逻辑代码”部分。

为什么Widget Logic如此不友好,你必须成为代码恶魔才能使用它?

这是故意的。我最初写它是为了尽可能灵活,想到在某些时候编写一个拖放UI。我从来没有接受它,因为(我很懒惰)我无法使它看起来很漂亮,让你回到’纯粹的代码’(为了在UI中更难以满足的可能性)。

插件小部件上下文提供了一个不错的用户界面,并且具有整洁的“URL匹配”功能。

小部件不应出现

可能是您的主题在调用侧边栏之前执行自定义查询。尝试 wp_reset_query 选项。

或者,您可能没有足够严格地定义逻辑。例如,当正在处理边栏时,如果存档页面上的最后一个帖子位于“cheese”类别中,则in_category(’cheese’)将为true。

使用PHP的逻辑AND’&&来收紧您的定义,例如:

  is_single()&& in_category('cheese') 

评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注