Wordpress Widget动态添加字段

时间:2014-07-10 14:17:01

标签: php jquery wordpress

我创建了一个自定义小部件,我想用jQuery动态添加字段。 它放置了字段,但它不会添加字段。

希望任何人都可以帮我看看有什么不对

<?php
add_action( 'widgets_init', 'custom_widget');

function custom_widget() {
register_widget( 'custom_widget_info' );
}

class custom_widget_info extends WP_Widget {


function custom_widget_info () {

$this->WP_Widget('custom_widget_info', 'custom_widget', $widget_ops );        }

public function form( $instance ) {

if ( isset( $instance[ 'titel' ]) && isset ($instance[ 'option' ])) {
$titel = $instance[ 'titel' ];
$option = $instance[ 'option' ];
}
else {
$titel = __( '', 'widget_title' );
$option = __( '', 'widget_title' );
} ?>
<p>Titel: <input name="<?php echo $this->get_field_name( 'titel' ); ?>" type="text" value="<?php     echo esc_attr( $titel );?>" /></p>
<script type="text/javascript">
$(function() {
var addDiv = $('#addinput');
var i = $('#addinput p').size() + 1;

$('#addNew').live('click', function() {
$('<p><input type="text" id="p_new" size="40" name="p_new_' + i +'" value="" placeholder="I am New" /><a href="#" id="remNew">Remove</a> </p>').appendTo(addDiv);
i++;

return false;
});

$('#remNew').live('click', function() {
if( i > 2 ) {
$(this).parents('p').remove();
i--;
}
return false;
});
});

</script>

<div id="addinput">
<p>
<input type="text" id="p_new" size="20" name="p_new" value="" placeholder="Input Value" /><a href="#" id="addNew">Add</a>
</p>
</div> 
<?php

}

function update($new_instance, $old_instance) {

$instance = $old_instance;

$instance['titel'] = ( ! empty( $new_instance['titel'] ) ) ? strip_tags( $new_instance['titel'] ) : '';

$instance['option'] = ( ! empty( $new_instance['option'] ) ) ? strip_tags( $new_instance['option'] ) : '';

return $instance;

}

function widget($args, $instance) {

extract($args);

echo '<div class="footer_item">';
echo $before_widget; //Widget starts to print information

$titel = apply_filters( 'widget_title', $instance['titel'] );

$option = empty( $instance['option'] ) ? '&nbsp;' : $instance['option'];

if ( !empty( $titel ) ) { echo $before_title . $titel . $after_title; };
echo $option;
echo $after_widget; //Widget ends printing information
echo '</div>';

} }
?>

我认为它可能与jQuery的负载有关,因为它不是通过enque脚本,但我不知道如何解决这个问题。我会做一些谷歌搜索如何解决这个问题。

顺便说一句,如果有一个JQuery的调试器,那将是非常棒的。然后我可以看到它出错的地方。 我在FireBug中使用FireQuery,但这并没有告诉我脚本出错的地方。

日Thnx 微米。

-UPDATE-UPDATE-UPDATE-UPDATE-UPDATE-UPDATE-UPDATE-UPDATE-UPDATE-UPDATE-UPDATE -

修复它的类别。 我发现所有元素都是基于他们的id来调用的。 由于这是WordPress,我正在创建一个小部件,原始小部件和我为放置小部件而创建的新实例现在都是双重的。

仍然关注我? Wordpress在与用于显示数据的小部件相同的页面上显示所有当前小部件的库。 因此,如果jQuery依赖于id和id,只有在它永远不会工作时才允许。 考虑到这一点,我将所有内容都改为了类。但这有效,jQuery复制了所有类,因为有两个小部件;每次我点击添加按钮,它都会复制两个实例。 : - (

所以现在我需要弄清楚如何解决这个问题....

1 个答案:

答案 0 :(得分:0)

jQuery的live()自1.7以来已被弃用,并在1.9中删除,使用on()

http://api.jquery.com/on/