如果我需要返回一个数组,我可以使用小部件和短代码吗?

时间:2013-09-27 作者:seangwright

我正在尝试实现以下功能。

我有几个小部件“区域”,可以将小部件放在其中。我将这些小部件区域编程为我网站的主题,我可以在管理面板中打开和关闭它们。小部件区域基本上是我网站上的部分,我将文本小部件放入其中,并将广告放入这些文本小部件中。小部件区域还填充了其他分类内容(新闻稿注册表、最受欢迎的帖子等)。

我正在使用一个插件来管理我的广告(http://wordpress.org/plugins/ads-by-datafeedrcom/ ) 它有很好的功能。我将短代码放入文本小部件中,广告就会按预期显示出来。

我需要能够从这个插件生成的db查询中排除广告。我可以在短代码中作为属性传递要排除的广告-这不是问题。

我的问题是,我需要获取短代码显示的广告的ID。我希望短代码返回短代码文本内容和一组排除的广告,这些广告包含当前广告和任何以前的广告(这将防止重复广告出现在网站上)。

然后,我将通过属性和全局变量将这个被排除ID的数组传递到下一个短代码中。

我的问题是:短代码能否返回字符串以外的任何内容?我的设置(调用广告、文本小部件、通过启用小部件区域管理广告放置的短代码)是否无法维持?

我已经做到这一点了

[dfads params=\'groups=1234&ad_class=sidebar-ad&limit=1&orderby=random&excluded_ads=1,4,6\']

这叫做

function dfads_shortcode( $atts ) { return dfads( $atts[\'params\'] ); }

dfads 退货get_adsget_ads 返回此

return array($this->output( $ads, $this->args ), $excluded_ads);

因此,我返回一个包含字符串的数组($this->output)(&;array($excluded\\u ads),我想显示字符串并捕获数组以传递到下一个短代码。

我应该在循环中的代码中完成这一切吗?是否可以从小部件中获得此功能&;短代码?

--更新1

我注意到有[方法]http://www.emanueleferonato.com/2011/04/11/executing-php-inside-a-wordpress-widget-without-any-plugin/ 用于在小部件中运行php代码。

如果这是一个管理员专用功能,那么它是否安全?我仍然可以访问全局变量吗?执行流是否基本上与我在页面流中的php代码相同,在页面流中显示的是小部件而不是小部件?

我可以在显示的页面中执行所有这些操作,但通过在小部件/仪表板中使用这些内容,对管理来说似乎要干净得多。

1 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

我认为你提出的解决方案,或攻击计划,远比它需要的复杂得多。您可以使用静态变量来管理它。概念验证:

function shortcode_with_static_data($atts,$content) {
  static $ids;
  $ids[] = time();
  var_dump($ids); // you should return a string not dump data in a real shortcode
}
add_shortcode(\'scwsc\',\'shortcode_with_static_data\');
您需要创建自己的短代码,类似于上述内容,并将其用作add data短代码或相关函数的包装器。如果没有看到插件代码,我真的无法确切地说出它是什么样子。

结束

相关推荐

Widgets in the loop if active

我正在尝试将一个小部件作为“第一个帖子”,如果它处于活动状态。。然后让帖子继续。。它可以工作,但第一篇帖子消失了,第二篇帖子成为小部件后的第一行。。看不出我做错了什么。。正如你所看到的,我已经有一个小部件显示在帖子之间。<?php if (have_posts()) : ?> <?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; ?> <?php $i=1;?>