Sto provando a creare un widget personalizzato per il mio plug-in e seguendo the codex.È necessario get_field_id() per il modulo archiviato nell'API di WordPress Widget?
Questo è quello che ho finora. Funziona e salva e visualizza il valore dell'opzione salvata.
<?php
/**
* Plugin Name: Sample Widget
*/
$colors = array('red', 'blue', 'yellow');
update_option('sample_widget', $colors);
add_action('widgets_init', create_function('', 'register_widget("Sample_Widget");'));
class Sample_Widget extends WP_Widget {
public function __construct() {
parent::__construct(
'foo_widget',
'Sample Widget',
array('description' => __('This is a description of the sample widget', 'text_domain'),) // Args
);
}
public function widget($args, $instance) {
extract($args);
$title = apply_filters('widget_title', $instance['title']);
$color = apply_filters('widget_title', $instance['color']);
echo $before_widget;
if (! empty($title))
echo $before_title . $title . $after_title;
echo 'the selected color is ' . $color . '<br />';
echo $after_widget;
}
public function update($new_instance, $old_instance) {
$instance = array();
$instance['title'] = strip_tags($new_instance['title']);
$instance['color'] = $new_instance['color'];
return $instance;
}
public function form($instance) {
if (isset($instance[ 'title' ])) {
$title = $instance[ 'title' ];
}
else {
$title = __('New title', 'text_domain');
}
if (isset($instance[ 'color' ])) {
$selected_color = $instance[ 'color' ];
}
$colors = get_option('sample_widget');
?>
<p>
<label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
<input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" />
</p>
<p>
<select name="<?php echo $this->get_field_name('color'); ?>" id="<?php echo $this->get_field_id('color'); ?>">
<option value="">Select...</option>
<?php foreach($colors as $color) echo '<option value="' . esc_attr($color) . '" ' . ($color == $selected_color ? 'selected="Selected"' : '') . '>'. $color .'</option>'; ?>
</select>
</p>
<?php
}
}
Ho due domande:
- Qual è per? Ho rimosso questa parte della linea e sembra funzionare bene. L'ho inserito per copiare solo il codice di lavoro del codice.
- Nel costruttore, il primo parametro in
parent::__construct()
è un ID di base. Potrebbe essere un valore stringa qualsiasi? L'ho cambiato in qualcos'altro dafoo_widget
e sembra funzionare.
Grazie per le vostre informazioni.
Per quanto riguarda il numero 1, sembra che sarebbe meglio lasciarlo così com'è. Grazie per il tuo contributo. Per quanto riguarda il n. 2, ho cambiato l'ID di base con qualcos'altro come 'something_else' da' foo_widget' e ho usato il valore stringa 'Sample_Widget' in' create_function ('', 'register_widget ("Sample_Widget");') 'e funziona ancora. Quindi sembra che possano essere valori diversi. Mi sto perdendo qualcosa? – Teno
Sulla base di ciò che so sull'argomento e su una limitata esplorazione del database ... Mi chiedo se questa seconda istanza dell '"ID di base" sia ciò che WordPress usa per creare la tabella del database per memorizzare le informazioni del widget. Se vai alla tabella 'WP_Options' vedrai cose come 'widget_categories' o 'widget_text'. Suppongo che i tuoi widget attivi appaiano come "widget_Sample_Widget" nella base dati? Solo un pensiero – NerdNextDoor
Ho trovato che il valore del parametro per "register_widget()" è il nome esteso della classe personalizzata. Http://codex.wordpress.org/Function_Reference/register_widget Quindi dovrebbe essere una cosa diversa dall'ID di base Quando ho sfogliato la tabella 'wp_options', in effetti ho trovato un elemento chiamato, widget_someting_else', non era 'widget_Sample_Widget'. Quindi, a questo punto, mi sento più sicuro che l'ID di base possa essere una qualsiasi stringa arbitraria all'interno della limitazione della lunghezza del carattere per la tabella delle opzioni.Per quanto ricordo era di massimo 45 caratteri. – Teno