1

我正在制作的自定义 Wordpress 小部件有问题。由于某种奇怪的原因,表单函数运行了两次,因此产生了两个 Redactor 文本区域,但它仅在我将小部件添加到侧边栏时才会发生。不是当我在添加后单击保存按钮时。

我该怎么做才能让我的表单函数只运行一次,或者至少让 JavaScript 运行一次。

完整的小部件代码

http://pastebin.com/BHDJSxWX

我的表单功能

function form($instance)
{
    $instance = wp_parse_args((array) $instance, array( 'box1' => '', 'box2' => '', 'box3' => '', 'box4' => '' ));
    $box1 = $instance['box1'];
    $box2 = $instance['box2'];
    $box3 = $instance['box3'];
    $box4 = $instance['box4'];
    $boxqty = $instance['boxqty'];


    $uniqueID = rand();
    echo "Unique ID: ".$uniqueID;

    ?>        
    <p>
        <label for="<?php echo $this->get_field_id('boxqty'); ?>">Number of blocks: (1-4)
            <input class="widefat" id="<?php echo $this->get_field_id('boxqty'); ?>" name="<?php echo $this->get_field_name('boxqty'); ?>" type="text" value="<?php echo attribute_escape($boxqty); ?>" />
        </label>
    </p>  
    <p>
        <label for="<?php echo $this->get_field_id('box1'); ?>">Box 1: 
            <textarea class="widefat redactor_content_<?php echo $uniqueID; ?>" id="box1" name="<?php echo $this->get_field_name('box1'); ?>" style="width: 600px;"><?php echo $box1; ?></textarea>
        </label>
    </p>
    <p>
        <label for="<?php echo $this->get_field_id('box2'); ?>">Box 2: 
            <textarea class="widefat redactor_content_<?php echo $uniqueID; ?>" id="<?php echo $this->get_field_id('box2'); ?>" name="<?php echo $this->get_field_name('box2'); ?>" style="width: 600px;"><?php echo $box2; ?></textarea>
        </label>
    </p>
    <p>
        <label for="<?php echo $this->get_field_id('box3'); ?>">Box 3: 
            <textarea class="widefat redactor_content_<?php echo $uniqueID; ?>" id="<?php echo $this->get_field_id('box3'); ?>" name="<?php echo $this->get_field_name('box3'); ?>" style="width: 600px;"><?php echo $box3; ?></textarea>
        </label>
    </p>
    <p>
        <label for="<?php echo $this->get_field_id('box4'); ?>">Box 4: 
            <textarea class="widefat redactor_content_<?php echo $uniqueID; ?>" id="<?php echo $this->get_field_id('box4'); ?>" name="<?php echo $this->get_field_name('box4'); ?>" style="width: 600px;"><?php echo $box4; ?></textarea>
        </label>
    </p>
    <!--Activate Redactor-->
    <script type="text/javascript">

                jQuery('.redactor_content_<?php echo $uniqueID; ?>').redactor({
                    fixed: true
                });
            console.log('Unique ID: <?php echo $uniqueID; ?>');
    </script>
    <?php
}
4

1 回答 1

0

我测试了一些东西,似乎正在发生的事情是整个小部件加载在左侧,小部件表单内容被隐藏,右侧在“活动”小部件部分。未经测试,但您应该只能通过以下方式定位“活动”部分:

jQuery('.widgets-holder-wrap .redactor_content_<?php echo $uniqueID; ?>').redactor({
    fixed: true
});

如果我有完整的小部件,我可能会发现其他东西。

于 2013-03-13T13:54:14.530 回答