5

我尝试过以下两种方法之一:

  1. form我的Widget类(extends WP_Widget)的方法中,我有以下片段,它设置了一个全局 javascript 变量:

    if( $instance ) :
    ?>
        <script type="text/javascript">
            window.widget_order_name = "<?php echo $this->get_field_name( 'order' ) ?>";
        </script>
    <?php
    endif;
    
  2. 在小部件管理标记中,我还尝试创建以下 html 结构:

    <div
      field_name='<?php echo $this->get_field_name( 'order' ) ?>'
      id='order_field_name'
      class='hidden'>
    </div>
    

在我的小部件管理 javascript 文件中,我以两种方式之一获取该 field_name 的值(如下所示),然后将该小部件名称附加到隐藏输入字段的名称(其中包含我要存储的值)。

  1. 第一种方式,使用window.widget_order_name

    var widget_field_name = window.widget_order_name;
    
  2. 第二种方式,jQuery用于抓取field_name

    var widget_field_name = $( '#order_field_name' ).attr( 'field_name' );
    

我的问题:

每当我第一次将小部件从“可用小部件”容器移动到我的侧边栏时,我都没有得到实际的字段名称,而是得到了字段名称的一种占位符

所以,而不是得到这样的东西:

<input 
  type="hidden" 
  name="widget-hours-widget[2][order][]"
  value="L48">

我明白了:

<input 
  type="hidden" 
  name="widget-hours-widget[__i__][order][]" 
  value="L26">

单击保存按钮后,它field_name会给我小部件的正确名称,widget-hours-widget[2]而不是占位符widget-hours-widget[__i__]

有没有人遇到过类似的问题或知道如何解决它?

谢谢。

4

1 回答 1

1

问题

所以我弄清楚了问题所在。在下面的语句中,jQuery 正在获取第一个 id 为#order_field_name.

var widget_field_name = $( '#order_field_name' ).attr( 'field_name' );

事实证明,实际上有两个具有该 ID 的元素。具有此 id 的第一个元素是可用小部件部分中的小部件。这是您单击并将小部件拖动到侧边栏的部分。这是 jQuery 选择器返回给我的元素。

小部件名称和描述。

和标记:

在此处输入图像描述

解决方案

我有一个点击监听器,它动态添加带有字段名称的隐藏输入框。因此,我使用 jQuery 的树遍历方法返回到小部件的form元素并向下遍历返回到具有#order_field_nameid 的元素。从那里,我抓住了field_name属性,它具有正确的field_name.

$( 'a.add-schedulable' ).click( function( evt ) {

  // ... code omitted ...

  var widget_field_name = $( this ).parents( 'form' ).find( '#order_field_name' ).attr( 'field_name' );

   // ... code omitted ...
}); 

从那里,我使用了一些 javascript 和 jQuery 来创建一个具有所需属性的隐藏输入元素,它看起来类似于以下内容:

<input 
  type="hidden" 
  name="widget-hours-widget[3][order][]" 
  value="L13"> 
于 2013-08-28T23:58:42.460 回答