我正在构建一个Wordpress小部件,可用于在前端显示引号。可以使用作者姓名和引用文本插入引号。
我的小部件文件如下所示:
class random_quotes extends WP_Widget {
function random_quotes(){
$widget_ops = array(
'classname' => 'random-quotes',
'description' => __('Fill in quotes to display random on your site with every new pageload.', 'onm_textdomain' ),
);
$control_ops = array(
'id_base' => 'random-quotes',
);
$this->WP_Widget('random-quotes', __('Random Quotes', 'onm_textdomain' ), $widget_ops, $control_ops);
}
function widget($args, $instance){
extract($args);
$title = apply_filters('widget_title', $instance['title']);
$quote = isset($instance['quote'])?$instance['quote']:'';
if($title){
echo $before_title.$title.$after_title;
}
echo $before_widget;
?>
<div class='random_quotes_widget'>
<div class="quote">
<blockquote>
<?php function get_random_quote($quotes) {
$quote = $quotes;
$random_quote = array_rand($quote);
$random = $quote[$random_quote];
return '<p>' . $random["quote"] . '.</p>'.'<cite>' . $random["name"] . '</cite>';
}
echo get_random_quote($quotes); ?>
</blockquote>
</div>
</div>
<?php
echo $after_widget;
}
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['title'] = esc_html( $new_instance['title'] );
$instance['quotes'] = array();
if ( isset ( $new_instance['quotes'] ) ) {
foreach ( $new_instance['quotes'] as $value_quote ) {
if ( '' !== trim( $value_quote ) )
$instance['quotes'][] = $value_quote;
}
}
return $instance;
}
function form($instance){
$defaults = array('title' => __('Quotes', 'onm_textdomain' ));
$instance = wp_parse_args((array) $instance, $defaults);
$quotes = isset ( $instance['quotes'] ) ? $instance['quotes'] : array();
$quotes[ count( $quotes ) + 1 ] = '';
$quotes_html = array();
$quotes_counter = 0;
foreach ( $quotes as $quote => $value_quote ) {
$quotes_html[] = sprintf(
'<tr id="postcustomstuff">
<td>
<table id="single-quote" width="100">
<thead>
<tr>
<th style="line-height: 28px;">'.__('Quote', 'onm_textdomain' ).'<a class="button remove-row right" href="#">-</a></th>
</tr>
</thead>
<tbody>
<td>
<input type="text" name="%1$s[%2$s]" value="%3$s" class="widefat" placeholder="'.__('Name', 'onm_textdomain' ).'" />
<textarea class="widefat" rows="5" cols="20" name="%1$s[%2$s]" placeholder="'.__('Quote', 'onm_textdomain' ).'" />%3$s</textarea>
</td>
</tbody>
</table>
</td>
</tr>',
$this->get_field_name( 'quotes' ),
$quotes_counter,
esc_attr( $value_quote )
);
$quotes_counter += 1;
}
?>
<p>
<label for="<?php echo esc_attr($this->get_field_id('title')); ?>"><?php _e('Title:', 'onm_textdomain');?></label>
<input type="text" class="widefat" id="<?php echo esc_attr($this->get_field_id('title')); ?>" name="<?php echo esc_attr($this->get_field_name('title')); ?>" value="<?php echo esc_attr($instance['title']); ?>" />
</p>
<table id="publication-downloadset-one" width="100%">
<tbody>
<?php print join( $quotes_html ); ?>
<tr class="add-row">
<td>
<p><input type="submit" name="savewidget" class="button widget-control-save" value="+"></p>
</td>
</tr>
</tbody>
</table>
<script type="text/javascript">
jQuery(document).ready(function( $ ){
$( '.widget' ).click(function() {
if ( !$( this ).hasClass( 'open' ) ) {
$( this ).css({"z-index": "100", "margin-left": "-146px"});
}
});
$( '.remove-row' ).on('click', function() {
$(this).parents('tr').remove();
return false;
});
$('#single-quote thead').click(function () {
$(this).next('tbody').toggleClass('hidden');
});
});
</script>
<?php
}
}
function random_quotes_widget(){
register_widget('random_quotes');
}
add_action('widgets_init', 'random_quotes_widget');
根据this question上@toscho的回答,我找到了一种方法将我的widget字段数据存储为数组。所以,由于他的回答,我得到以下数组输出:
Array (
[0] => Quote text 1
[1] => Quote text 2
[3] => Quote text 3
)
但我正在寻找的是以下输出:
Array (
[0] => Array (
[quote] => Quote text 1
[author] => Author of the quote 1
)
[1] => Array (
[quote] => Quote tekst 2
[author] => Author of the quote 2
)
)
有没有办法创建这个多维数组?非常感谢你的帮助!
答案 0 :(得分:1)
您可能需要调整它以使其正常工作,但这样的事情可能有效:
if ( isset ( $new_instance['quotes'] ) ) {
$index = 0;
foreach ( $new_instance['quotes'] as $value_quote ) {
if ( '' !== trim( $value_quote ) ) {
$instance['quotes'][ $index ] = array();
$instance['quotes'][ $index ]['quote'] = $value_quote;
$instance['quotes'][ $index ]['author'] = 'name author';
$index++;
}
}
}