添加设置选项到WordPress原有的小工具中

在本文中,我们将学习若何将自界说HTML和设置添加到WordPress的任何尺度小工具中。使用这些设置,我们将学习若何响应地操作小工具行为的差异技巧。第一部门,添加和保留您的自界说设置异常简朴。第二部门取决于您要详细执行的操作,而且取决于您要操作的小工具。在这篇文章中,我包罗了两个例子。凭证设置跳过小工具(在某些情形下用于添加设置以控制小工具的可见性),并处置WordPress导航小工具的菜单参数。第二部门给出的示例应该为您提供若那边理想要做的事情的很好的线索。

添加设置选项到任何小工具

要将自界说设置选项添加到现有的小工具,我们使用了一个名为的in_widget_form钩子。此钩子将应用于所有小工具的form()方式,该方式认真出现小工具的后台设置部门。

这个过滤器有三个参数,但现实上我们只对第一个和第三个感兴趣。第一个是小工具实例,我们将使用它来获取适当的字段名称和ID,并(可选)检查我们所毗邻的小工具类型。第三个参数是小工具的已保留设置的数组,我们需要使用该数组来检查设置的先前保留状态。

下面的代码将添加一个设置名称为’ awp-custom-setting’的复选框。将名称和HTML调整为所需的输入。主要的是要用于为所有输入$widget->get_field_name()添加适当的ID和name属性。输入的值应使用先前保留的内容填充,这就是您可以在参数中找到的$instance内容。对于复选框,您可以使用WordPress的checked()函数输出选中的属性。

  1. add_action('in_widget_form', function($widget, $return, $instance) {
  2. 	?>
  3. 	<p>
  4. 		<input type="checkbox" class="checkbox" name="<?php echo $widget->get_field_name('awp-custom-setting'); ?>" id="<?php echo $widget->get_field_name('awp-custom-setting'); ?>" <?php checked(isset($instance['awp-custom-setting']) ? $instance['awp-custom-setting'] : 0); ?> />
  5. 		<label for="<?php echo $widget->get_field_name('awp-custom-setting'); ?>"><?php __('Activate something', 'txtdomain'); ?></label>
  6. 	</p>
  7. 	<?php
  8. }, 10, 3);

将其添加到主题functions.php或插件代码后,所有小工具现在都应在设置选项的表单末尾获得一个复选框。

定位特定的小工具

若是您只想将设置应用于一个或某些特定的小工具,则可以对照$widget工具中的id_base属性。您需要知道基本ID-若是不确定,只需在var_dump($widget->id_base)内部执行钩子操作,保留并检查后台中每个小工具的输出即可。例如,导航菜单小工具具有nav_menuID,而存档小工具具有 archivesID。

在下面的示例中,我们检查该小工具是否为导航菜单小工具。若是不是,则使用return作废该功效。仅导航小工具将获得自界说复选框:

  1. add_action('in_widget_form', function($widget, $return, $instance) {
  2. 	if ($widget->id_base != 'nav_menu') {
  3. 		return;
  4. 	}
  5.  
  6. 	?>
  7. 	<p>
  8. 	...

现在,你在后台应该可以看到导航菜单小工具的新选项:
添加设置选项到WordPress原有的小工具中
然则现在还不能保留设置,下面我们继续!

保留您的自界说设置

我们需要毗邻到小工具的update()方式以更新我们的自界说设置。为此,我们使用widget_update_callback过滤器。保留设置的历程与编写小工具类时完全一样。过滤器提供了三个参数:第一个是将要保留的实例数组。第二个参数是保留小工具时已宣布的状态,第三个参数是旧状态。我们需要确保从第二个参数中获取新值并将其添加到第一个参数中。这就是我们更新复选框状态的方式,由于我们要保留一个true或false值:

  1. add_filter('widget_update_callback', function($instance, $new_instance, $old_instance) {
  2. 	$instance['awp-custom-setting'] = isset($new_instance['awp-custom-setting']);
  3. 	return $instance;
  4. }, 10, 3);

切记将输入名​​称调整为您自己的设置名称。若是要添加多个输入,则需要为每个输入重复此操作。现在,您应该看到自界说设置已保留在后台中!

使用保留的自界说小工具设置

如前所述,这部门现实上取决于您要举行的设置。不幸的是,它不是那么简朴,由于大多数小工具都没有在其输出中添加过滤器或挂钩。让我们从简朴的事情最先;阻止凭证设置渲染小工具。

凭证自界说设置阻止渲染小工具

假设您要添加有关何时应显示小工具的设置;例如将其隐藏在某些模板中(隐藏在搜索效果模板中,但显示在首页和单个页面中),或对其他WordPress状态做出反映。为此,我们可以使用widget_display_callback过滤器。我们需要做的就是检查所提供的实例参数以举行设置,若是我们不想渲染小部件,则返回false。若是选中了上面添加的自界说复选框,此简朴代码将阻止出现小工具:

  1. add_filter('widget_display_callback', function($instance, $widget, $args) {
  2. 	if ($instance['awp-custom-setting']) {
  3. 		return false;
  4. 	}
  5. 	return $instance;
  6. }, 10, 3);

您可能想对照其他状态。这是一个简朴的示例,其中我们的复选框是“隐藏在单个文章页面中”的复选框。我们只需使用is_singular() 检查我们当前是否处于任何单个文章页面中,若是选中了复选框,则返回false。

  1. add_filter('widget_display_callback', function($instance, $widget, $args) {
  2. 	if (is_singular() && $instance['awp-custom-setting']) {
  3. 		return false;
  4. 	}
  5. 	return $instance;
  6. }, 10, 3);

修改现有小工具的设置或输出

一个壮大的dynamic_sidebar_params过滤器可用于与现有的小工具一起玩耍。查看文档页面以查看可以修改的参数。例如,您可以添加自界说类,可以修改before_widget,after_widget或before_title和after_titleHTML字符串。但这适用于所有小工具,包罗治理后台和前端。而且使用此过滤器,您无权接见小工具的实例(保留的设置)或设置(例如小工具的类型)。

显然,我们至少需要检查我们的自界说设置。因此,我们需要做一些代码才气获取所需的值。

我们可以做的第一件事是接见全局变量$wp_registered_widgets。这是一个包罗所有已注册的可用小工具的数组。使用该注册表,我们可以使用过滤器的参数来查找当前所在的特定小工具。找到当前的小工具后,便可以接见小工具参数,例如id_base–如前所述,它告诉我们小工具的类型。

  1. add_filter('dynamic_sidebar_params', function($params) {
  2. 	global $wp_registered_widgets;
  3.  
  4. 	$this_widget_id = $params[0]['widget_id'];  // Current widget ID
  5. 	$this_widget = $wp_registered_widgets[$this_widget_id];
  6. 	$widget_object = $this_widget['callback'][0];  // Current widget object
  7.  
  8. 	// With $widget_object we have access to e.g. id_base for checking type of widget
  9. 	if ($widget_object->id_base != 'nav_menu') {
  10. 		return $params;
  11. 	}
  12.  
  13. 	return $params;
  14. });

如您所见,第9行我们最终可以检查当前所处小工具的类型。在上面的代码中,若是x工具类型不是“导航菜单”小工具,则返回,由于仅为这些小工具添加了自界说设置。

获取已保留小工具的设置

然则我们还需要获取每个小工具的已保留设置(包罗我们的自界说设置)。所有小工具的已保留设置都存储在按小工具类型分组的选项数据库中。使用小工具注册表中的属性,我们可以用get_option()来获取当前小工具类型的保留设置。返回值将是一个索引数组,在这里我们需要使用过滤器中的另一个性能参数来查找当前索引(由于您可以在相同或差其余侧边栏中添加多个相同小工具类型)。用代码显示比注释它容易:

  1. 	...
  2. 	if ($widget_object->id_base != 'nav_menu') {
  3. 		return $params;
  4. 	}
  5.  
  6. 	$all_settings = get_option($widget_object->option_name);
  7. 	$saved_settings = $all_settings[$params[1]['number']];
  8. 	if ($saved_settings['my-custom-thing']) {
  9. 		// Do your thing
  10. 	}
  11.  
  12. 	return $params;
  13. });

最后,我们领会了小工具的保留设置!在上面的示例代码中,在第#9行,我们检查是否选中了自界说复选框。

示例

在这一点上,取决于您要做什么。例如,您可以在小工具题目之后但在小工具内容之前出现输出:

  1. 	...
  2. 	if ($saved_settings['my-custom-thing']) {
  3. 		$params[0]['after_title'] .= '<div>This appears before widget content</div>';
  4. 	}
  5. 	...

对于更真实的用例,通常可以通过此时挪用add_filter()来添加某些过滤器来解决大多数问题。

下面是一个示例,该示例通过检查是否添加设置来修改“导航”菜单参数。若是未选中,请确保已删除过滤器。用于修改用于渲染“导航”菜单的参数的过滤器为widget_nav_menu_args。在下面的代码中,我界说了一个应用于此过滤器的函数,该函数在菜单参数中添加了一个新参数 walker:

  1. ...
  2. 	if ($saved_settings['my-custom-thing']) {
  3. 		add_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10, 3);
  4. 	} else {
  5. 		remove_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10);
  6. 	}
  7. 	return $params;
  8. });
  9. function awp_add_menu_walker($nav_menu_args, $nav_menu, $args) {
  10. 	$nav_menu_args['walker'] = new AWP_Custom_Walker();
  11. 	return $nav_menu_args;
  12. }

上面的代码是一个用例的示例,其中自界说复选框控制是否将菜单浏览器应用于菜单。若是您希望所有菜单正常出现,但希望特定菜单小工具的选项出现差异,则异常好。walker若那边理菜单输出取决于您。

有关将自界说设置添加到所有“导航”菜单,对其举行更新并应用菜单浏览器的完整代码,请参见下文。

希望这足以让您弄清晰若何编写要编写的代码。这现实上取决于您要执行的操作以及正在使用的小工具类型。如上所述,通常大多数修改都可以通过添加过滤器dynamic_sidebar_params来解决的。

完整示例:

导航小工具上的自界说复选框设置,用于应用菜单walker,这是将自界说复选框添加到所有WordPress的“导航”菜单小工具以使用已注册的菜单walker的完整代码。(不包罗walker代码)

  1. // Add custom setting to menu widgets
  2. add_action('in_widget_form', function($widget, $return, $instance) {
  3. 	// Add setting only to menu widgets
  4. 	if ($widget->id_base != 'nav_menu') {
  5. 		return;
  6. 	}
  7.  
  8. 	?>
  9. 	<p>
  10. 		<input type="checkbox" class="checkbox" name="<?php echo $widget->get_field_name('activate-walker'); ?>" id="<?php echo $widget->get_field_name('activate-walker'); ?>" <?php checked(isset($instance['activate-walker']) ? $instance['activate-walker'] : 0); ?> />
  11. 		<label for="<?php echo $widget->get_field_name('activate-walker'); ?>"><?php __('Activate walker', 'txtdomain'); ?></label>
  12. 	</p>
  13. 	<?php
  14. }, 10, 3);
  15.  
  16.  
  17. // Update custom setting
  18. add_filter('widget_update_callback', function($instance, $new_instance, $old_instance) {
  19. 	$instance['activate-walker'] = isset($new_instance['activate-walker']);
  20. 	return $instance;
  21. }, 10, 3);
  22.  
  23.  
  24. // Filter sidebar params to add filter if custom setting was activated
  25. add_filter('dynamic_sidebar_params', function($params) {
  26. 	global $wp_registered_widgets;
  27.  
  28. 	$this_widget_id = $params[0]['widget_id'];
  29. 	$this_widget = $wp_registered_widgets[$this_widget_id];
  30. 	$widget_object = $this_widget['callback'][0];
  31.  
  32. 	// Bail if not a menu widget
  33. 	if ($widget_object->id_base != 'nav_menu') {
  34. 		return $params;
  35. 	}
  36.  
  37. 	$all_settings = get_option($widget_object->option_name);
  38. 	$saved_settings = $all_settings[$params[1]['number']];
  39.  
  40. 	if ($saved_settings['activate-walker']) {
  41. 		add_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10, 3);
  42. 	} else {
  43. 		remove_filter('widget_nav_menu_args', 'awp_add_menu_walker', 10);
  44. 	}
  45.  
  46. 	return $params;
  47. });
  48.  
  49.  
  50. // Filter nav menu arguments to add walker
  51. function awp_add_menu_walker($nav_menu_args, $nav_menu, $args) {
  52. 	$nav_menu_args['walker'] = new AWP_Custom_Walker();
  53. 	return $nav_menu_args;
  54. }

总结

希望这篇文章对解决您的需求有所辅助,或者为您提供一些有关若何做自己需要做的事情的指导!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!3308869544
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有猫币奖励和额外收入!

主题镇 WP教程 添加设置选项到WordPress原有的小工具中 https://zhutizhen.com/14883.html

永远为用户服务的镇长!

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或联络我们。
查看详情

相关文章