Hallo Zusammen,
ich arbeite gerade an meinem ersten kleinen Widget. Ich habe leider nur sehr wenig Erfahrung in PHP und wollte deshalb um ein paar Tipps bitten.
Meinen bisherigen Code habe ich mit Hilfe des WP Codex und ein paar Tutorials im Netz zusammengeschustert.
Was macht das Widget?
Es gibt lediglich einen kurzen Text und eine Datumsberechnung aus. Es werden Tage ab einem Startdatum hochgezählt.
Problemstellung:
Ich möchte es dem Admin ermöglichen, das Startdatum in einer Option zu ändern.
Mein Code:
// Direkten Zugriff blockieren
if ( !defined('ABSPATH') )
die('-1');
add_action( 'widgets_init', function(){
register_widget( 'kral_widget' );
});
// Widget erzeugen
class kral_widget extends WP_Widget {
function __construct() {
parent::__construct(
// Base ID of your widget
'kral_widget',
// Name des Widgets im UI
__('KRAL Arbeitssicherheit', 'kral_widget_domain'),
// Widget Beschreibung
array( 'description' => __( 'Zählt Tage hoch ab dem 20.08.15 hoch', 'kral_widget_domain' ), )
);
}
//test
function form($instance)
{
$instance = wp_parse_args( (array) $instance);
?>
<p><label for="<?php echo $this->get_field_id('myValue'); ?>">
My Custom Value<input id="<?php echo $this->get_field_id('myValue'); ?>"
name="<?php echo $this->get_field_name('myValue'); ?>" type="text" value="<?php echo $instance['myValue']; ?>" />
</label></p>
<?php
}
function update($new_instance, $old_instance)
{
$instance = $old_instance;
$instance['myValue']=$new_instance['myValue'];
return $instance;
}
// Widget im Front-End initialisieren
public function widget( $args, $instance ) {
$title = apply_filters( 'widget_title', $instance['title'] );
// before and after widget arguments die vom Theme definiert werden
echo $args['before_widget'];
if ( ! empty( $title ) )
echo $args['before_title'] . $title . $args['after_title'];
// Hier wird der Code ausgeführt
echo __( 'Unsere Firma ist seit ', 'kral_widget_domain' );
$now = time(); // Heute
$start_date = strtotime("2015-08-20");
$datediff = $now - $start_date;
echo '<strong>', floor($datediff/(60*60*24)), '</strong>';
echo __( ' Tagen unfallfrei!', 'kral_widget_domain' );
echo $args['after_widget'];
}
// Widget Backend
public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
else {
$title = __( 'New title', 'kral_widget_domain' );
}
// Widget admin form
?>
<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>
<?php
}
// Updating widget replacing old instances with new
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
return $instance;
}
} // Class kral_widget ends here
// Register and load the widget
function kral_load_widget() {
register_widget( 'kral_widget' );
}
add_action( 'widgets_init', 'kral_load_widget' );
Alles anzeigen
Gleich vorweg, ich möchte nicht, dass jemand den Code komplett für mich schreibt, das wäre zu viel des Guten. Ich möchte lediglich eine Hilfestellung zu meiner Problematik.
Mein Grundgedanke ist, dass ich jetzt im Widget Admin Form eine Textbox oder auch eine Kalender Option erzeugen muss, welche dann mein start_date aktualisiert. Allerdings scheitre ich dabei kläglich. :/
Ich bedanke mich im Voraus für eure Antworten.