Ich baue ein Wordpress-Widget, das verwendet werden kann, um Anführungszeichen am Frontend anzuzeigen. Die Zitate können mit dem Autorennamen und dem Zitattext eingefügt werden.Multidimensionales Array in Wordpress Widget erstellen
Meine Widget-Datei sieht wie folgt aus:
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');
Basierend auf der Antwort von @toscho auf this question ich einen Weg gefunden habe meine Widget Felder Daten als Array zu speichern. So dank seine Antwort erhalte ich den folgenden Array-Ausgang:
Array (
[0] => Quote text 1
[1] => Quote text 2
[3] => Quote text 3
)
Aber was ich suche ist die folgende Ausgabe:
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
)
)
Gibt es eine Möglichkeit, dieses mehrdimensionales Array zu erstellen? Danke schon für eure Hilfe!
Dank @RST, diese legit scheint. Aber weißt du, wie ich diese Arrays in meinem Widget füllen und anzeigen kann? – Nick
Dieser Code sollte die 'if'-Schleife in Ihrer' update' Funktion ersetzen – RST
Danke @RST, und wie kann ich diese in einer foreach-Schleife ausgeben? Ich habe Probleme, die Werte auf meiner Website zu finden. – Nick