当前位置: 首页>>技术解读>>正文


使用小部件选项’outside’小部件

webfans 技术解读 , , 去评论

问题描述

我想在窗口小部件选项中保存一些参数,然后将这些参数传递到另一个页面。小部件是一个调用Web服务的表单。

我想传递的选项是对webservice的身份验证,该身份验证目前已硬编码到结果页面中(作为模板完成)。因此,它们应该对网站用户隐藏。

小部件/插件中的代码:

 function widget($args, $instance){
  extract($args);
  $title = apply_filters('widget_title', empty($instance['title']) ? 'Choose a service' : $instance['title']);
  $lineOne = empty($instance['username']) ? '' : $instance['username'];
  $lineTwo = empty($instance['password']) ? '' : $instance['password'];

  # Before the widget

  echo $before_widget; // etc...

结果页面…

$url = "http://www.nhs.uk/NHSCWS/Services/ServicesSearch.aspx?user=".[USERNAME]."&pwd=".[PASSWORD]."&q=".$_POST['PostCode']."&type=".$_POST['ServiceType']."";

还在学习WP如何挂在一起,对n00b问题感到抱歉。

最佳解决办法

@ JonathonByrd的答案可能是’best’ – 当然,如果可能的话你应该使用get_option,因为不能保证选项名称在WordPress版本之间保持不变。

同样 – @JonathonByrd也依赖于使用可以删除/重命名的全局变量(尽管可能非常不可能)。

不幸的是,我们无法可靠地使用公共包装。最接近的是Widget类的get_settings方法。假设你的小部件类是My_Widget_Class,那么:

 $dummy = new My_Widget_Class();
 $settings = $dummy->get_settings();

然后,$settingsarray(instance number => settings)形式的阵列。通常,您的小部件将具有任何ID,如my-widget-class-3 – 此处的’instance number’为3,因此

 $settings[3]

给出小部件my-widget-class-3的设置(作为数组)。我觉得这是一种更可靠,更具前瞻性的方法。

次佳解决办法

根本不是一个菜鸟问题。

你需要深入研究MySQL(使用PhpMyAdmin或类似的东西)并首先获得该选项的名称。以下SQL将列出窗口小部件选项:

SELECT *
FROM `wp_options`
WHERE `option_name`
REGEXP '^widget_'
LIMIT 0 , 30

然后在你的模板(或带有某种php exec插件的帖子/页面)中你可以像这样get_option()

<?php echo get_option('your_widget_option_name'); ?>

瞧瞧!

第三种解决办法

所有小部件及其选项都存储在global $wp_registered_widgets中。只需加载此变量并打印出内容即可找到您要查找的窗口小部件选项。

第四种办法

我用Stephen Harris建议的方法。

$dummy = new My_Widget_Class();
$settings = $dummy->get_settings();
$settings = reset($settings);

如果您不知道窗口小部件的ID是什么,reset()会从数组中提供第一个键值。

注意:如果窗口小部件的多个副本处于活动状态,则无效。因为它仅返回小部件的第一个副本的设置。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2720.html,转载请务必附带本地址声明。