微件图像重组布局

时间:2019-05-05 作者:Quentin Veron

我当前正在使用本机widget-image 输出如下内容:

<section class="widget widget_media_image">
  <h2 class="widget-title">Some title</h2>
  <a href="https://www.example.com/">
    <img width="300" height="225" src="..."  />
  </a>
</section>
这很好,但我想<h2> 包装在<a>.<有没有办法编辑当前widget image structure 或者我除了注册一个新的widget之外别无选择?

这就是我需要的:

<section class="widget widget_media_image">
  <a href="https://www.example.com/">
    <h2 class="widget-title">Some title</h2>
    <img width="300" height="225" src="..."  />
  </a>
</section>

1 个回复
SO网友:cjbj

实际上,并不是小部件本身负责广泛的结构。已确定when a sidebar is registered. 例如,小部件实例本身只存储标题。它周围的html(在您当前的情况下<h2>...</h2>, 您要更改为<a><h2>...</h2></a>) 在侧栏注册阶段设置。

现在,您的问题是您只想为一种特定类型的小部件更改此结构。幸运的是,您可以在渲染阶段执行此操作。如果你看看source of the rendering function, 您可以看到几个可以使用的过滤器。您正在寻找此项:

$params = apply_filters( \'dynamic_sidebar_params\', $params );
您可以这样使用它:

function wpse337107_add_link_to_widget_title ($params) {
  if ($params[widget_name] == \'media_image\') { // check needed if this is the correct widget name
    $params[before_title] = \'<a href="https://www.example.com><h2>"\';
    $params[after_title] = \'</h2></a>\';
    }
  return $params;
  }
add_filter (\'dynamic_sidebar_params\',\'wpse337107_add_link_to_widget_title\',10,1);
注意:代码没有经过测试,所以可能有bug,但我希望您能理解这一点。

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'