Widget erstellen – Fragen Sie im Admin-Panel nach einem Eintrag

Vor allem, Entschuldigung für mein Englisch, ich werde versuchen, es verständlich zu machen. Ich bin neu in WordPress. Ich habe bereits ein paar Plugins erstellt, aber sie brauchten keine Admin-Konfiguration. Jetzt möchte ich einen anderen erstellen, der ein Widget erstellt, bei dem der Administrator einen Beitrag eines benutzerdefinierten Beitragstyps aus einem Dropdown auswählen kann. Ich habe einen benutzerdefinierten Post-Typ “Ereignistyp 1” und einen anderen “Ereignistyp 2”, und ich versuche, ein Dropdown-Menü zu erstellen, das Beiträge dieser beiden Post-Typen auflistet.

Ich dachte, eine Anfrage zu machen, um alle Post in einem Dropdown aufzulisten und dann die ID dieses Beitrags zu speichern. Aber ich bin mir nicht sicher, ob das der richtige Weg ist und ich bin mir nicht einmal sicher, wie ich das in WordPress machen kann.

Wenn jemand irgendwelche Tipps dazu hat, würde ich das zu schätzen wissen.

Fürs Erste ist dies ein einfaches Widget aus einem Tutorial. Ich werde die Anzeige ändern, um die Informationen des Posts zu haben, den ich will, und ich muss das Dropdown für das Wählen des Pfostens hinzufügen. Der aktuelle Code lautet wie folgt:

// Creating the widget class event_widget extends WP_Widget { function __construct() { parent::__construct( // Base ID of your widget 'event_widget', // Widget name will event_widgetappear in UI __('Event Widget', 'my_event_widget'), // Widget description array( 'description' => __( 'Event Widget', 'my_event_widget' ), ) ); } public function widget( $args, $instance ) { $title = apply_filters( 'widget_title', $instance['title'] ); echo $args['before_widget']; if ( ! empty( $title ) ) { echo $args['before_title'] . $title . $args['after_title']; } echo __( 'Hello, World!', 'my_event_widget' ); echo $args['after_widget']; } public function form( $instance ) { if ( isset( $instance[ 'title' ] ) ) { $title = $instance[ 'title' ]; } else { $title = __( 'New title', 'my_event_widget' ); } ?> 

<label for="get_field_id( 'title' ); ?>"> <input class="widefat" id="get_field_id( 'title' ); ?>" name="get_field_name( 'title' ); ?>" type="text" value="" />

<?php } public function update( $new_instance, $old_instance ) { $instance = array(); $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : ''; return $instance; } } function wpb_load_event_widget() { register_widget( 'event_widget' ); } add_action( 'widgets_init', 'wpb_load_event_widget' );

Solutions Collecting From Web of "Widget erstellen – Fragen Sie im Admin-Panel nach einem Eintrag"

Versuchen Sie zunächst, an Ihrer Codeformatierung zu arbeiten. So wie es ist, ist es eher unlesbar und das macht es nicht nur schwieriger für uns zu verstehen, wie es Ihnen helfen kann, sondern auch weniger skalierbar und für die zukünftige Verwendung geeignet. Versuchen Sie immer, sich an die WordPress PHP Coding Standards zu halten.

Nun zum Thema Rindfleisch …

Um einem Widget eine neue Einstellung hinzuzufügen, müssen Sie die functionalität in zwei classnmethoden der class implementieren, die Sie bereits haben: form() und update() . In form() werden wir das Post-Drop-Down anzeigen, und in update() speichern wir den ausgewählten Post.

Dropdown-Liste anzeigen

Um das Dropdown anzuzeigen, verwenden wir WP_Query , das eine Abfrage zum Abrufen aller Posts erstellt. Wir platzieren diesen Code in der form function, bevor tatsächlich etwas angezeigt wird. Der folgende Code posts_per_page=1 alle ( posts_per_page=1 ) Posts von den Post-Typen post und page ( post_type=post,page ) ab und post_type=post,page sie nach Titel ( orderby=post_title ) aufsteigend ( order=ASC ). Die resultierenden Posts werden in der Eigenschaft $posts_query->posts gespeichert.

 $posts_query = new WP_Query( array( 'post_type' => array( 'post', 'page' ), // Replace by your posts types for event type 1 and 2 'posts_per_page' => -1, 'orderby' => 'post_title', 'order' => 'ASC' ) ); 

Als nächstes zeigen wir das Dropdown in der form() -Methode an, indem wir einfach die gefundenen Posts durchlaufen.

 

Versuchen Sie, den obigen Code zu verstehen, da Sie ihn für das Erstellen weiterer Widget-Optionen in der Zukunft benötigen werden!

Speichern des im Formular ausgewählten Posts

Jetzt verwenden wir die update() -Methode, um den ausgewählten Beitrag zu speichern, wenn jemand das Widget speichert. Um dies zu tun, wird nur eine weitere Zeile benötigt, bevor $instance zurückgegeben wird.

 $instance['post'] = $new_instance['post']; 

Dadurch wird der neue Post dem Instanzarray hinzugefügt, der zum Aktualisieren der Instanz verwendet wird.

Das sollte genug sein ..

… um dir auf deinem Weg zu helfen. Viel Glück beim Anzeigen der Post im Widget!