VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend-Widgets &...

29
Plugin-Entwicklung mit eigenen Tabellen, Backend- Widgets und Query-Filters am Beispiel des GEO-Plugins der VCAT EDULABS

description

Folien zur Session "Plugin-Entwicklung mit eigenen Tabellen, Backend-Widgets und Query-Filters am Beispiel des GEO-Plugins der VCAT EDULABS"

Transcript of VCAT EDULABS @ WP Camp 2013: Plugin-Entwicklung mit eigenen Tabellen, Backend-Widgets &...

  • 1. Plugin-Entwicklung mit eigenen Tabellen, Backend-Widgets und Query-Filters am Beispiel des GEO-Plugins der VCAT EDULABS

2. Inhalt die VCAT EDULABS Wer, Was, Wieso, Weshalb, Warum? das GEO-Plugin Sinn & Zweck Anwendung Historie & Ausblick der Einsatz von Backend-Widgets Query-Filters 9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"2 3. Ausbildung am lebenden ObjektDIE VCAT EDULABS9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"Nico Danneberg3 4. VCAT Consulting GmbH seit 1999 in der SoftwareEntwicklung ttig Leistungsspektrum Konzentration auf das Kerngeschft: Fokus Internet Kreativleistungen nur ber Partner seit 2006 eigenstndige GmbH mit Sitz in Potsdam-Babelsberg Durchschnittliches Wachstum von 20% 15 Mitarbeiterinnen und Mitarbeiter heterogene Kundenstruktur 9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"4 5. VCAT EDULABS Philosophie: Fachkrftesicherung durch Aus- und Weiterbildung Seit 2007 Ausbildungsbetrieb fr den Beruf des / der Mathematisch-technischen Softwareentwicklers/in Praxis- & Projektorientierte Ausbildung Grndung der VCAT EDULABS mit Fokus auf OpenSource-Anwendungen (WordPress, Typo3, vTiger, u.a.) Reale Projekte mit echtem Kundenkontakt Wissensrckfluss in die Community ffentliche Referenzen Erhhung der Reichweite 9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"5 6. Unser erstes ProjektDAS GEO-PLUGIN9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"Daniel Dziamski6 7. Sinn & Zweck Artikel und Seiten knnen mit Adressdaten versehen werden, z.B. Ort einer Veranstaltung Ort, an dem ein Foto / Fotoserie entstanden ist Anzeige einer Mini-Map im Inhalt des Artikels / der Seite Anzeige einer bersichtskarte mit allen Artikeln und Seiten, inkl. Verlinkung ber Sprechblase9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"7 8. Anwendung I Installation Plugin im WordPress Repository: VCAT EDULABS Posts at Google Maps Suchen, finden & wie gewohnt installieren: Automatische Installation ber WP Backend, Manuelle Installation, Upload ohne FTP Einstellungen VCAT EDULABS Einstellungen im Backend mit Unterseite fr GEO-Plugin9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"8 9. Anwendung II Shortcodes mit Attributen Groe MapMini-Map[vcat-dpagm][vcat-dpagm-mini]BreiteXXwidth=250px width=75%HheXXheight=100pxZentrumX-center=August-Bebel-Str. 26-53 14482 PotsdamZoomXXzoom=10ZielXXtarget=blankAusrichtungXXalign=leftShortcode9. November 2013Beispiel -WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"9 10. Einstellungsseite Im WordPress Backend zur Festlegung der Standardweitere aller ShortcodeAttribute9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"10 11. Backend-Widget Im Bearbeitungsmodus von Artikeln und Seiten9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"11 12. Bearbeitung der GEO-Daten Im QuickEdit-Modus von Seiten & Artikeln9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"12 13. Mini-Map In der Anwendung in einem Artikel9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"13 14. Groe Karte Mit allen Artikeln und Seiten9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"14 15. Historie & Ausblick HistorieAusblick GEO-Daten fr Artikel Frei whlbare Pins pro Artikel und Seite Genaue Positionierung per DragnDrop im Backend Filter als Attribute fr den Shortcode Benutzer-definierte Variablen und Kategorien Meta-Daten fr Kategorien nur mit extra Plugin mglich9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"15 16. Action-Hooks, Filter API und mehr Robin KramerDER EINSATZ VON BACKEND-WIDGETS UND QUERY-FILTERS 9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"16 17. Schritt 1: eigene Tabelle register_activation_hook( __FILE__, 'vcat_db_install' ); function vcat_db_install() { global $wpdb; global $VCAT_GEO_PI_TABLE ; global $vcat_db_version; $vcat_db_version = "1.0"; $sql = "CREATE TABLE IF NOT EXISTS $VCAT_GEO_PI_TABLE id INTEGER NOT NULL AUTO_INCREMENT, post_id INTEGER NOT NULL, lat FLOAT NOT NULL, lng FLOAT NOT NULL, str LONGTEXT, plz INTEGER(5) ZEROFILL, ort VARCHAR(20), UNIQUE KEY id (id) ); "; 9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"(17 18. Schritt 2: Backend-Widget add_action( 'add_meta_boxes', 'vcat_custom_fields_init' ); function vcat_custom_fields_init() { wp_enqueue_style( 'meta_css', PLUGIN_PATH . '/styles/meta.css');foreach( array( 'post', 'page' ) as $type ) { add_meta_box( 'vcat_custom_fields_meta', 'VCAT Geo Daten', 'vcat_custom_fields_setup', $type, 'normal', 'high' ); } } }9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"18 19. Schritt 2: Backend-Widget function vcat_custom_fields_setup() { global $post; $args = array( 'post_type' => array( 'page', 'post' ), 'posts_per_page' => 1, 'p'=>$post->ID ); $current = new WP_Query( $args ); $post = $current->post; // notwendiges HTML laden include( PLUGIN_FOLDER . '/custom/meta.php' ); echo ''; }9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"19 20. Schritt 2: Backend-Widget Speichern add_action( 'save_post', 'vcat_custom_fields_save' ); Lschen add_action( 'delete_post', 'vcat_delete_data' );9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"20 21. Schritt 3: Query-Filters Filter-Hooks fr die WP_Query posts_where_paged posts_groupby posts_join_paged posts_orderby posts_distinct post_limits posts_fields posts_clauses Filter fr alle Query-Elemente 9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"21 22. Schritt 3: Query-Filters add_filter( 'posts_clauses', 'vcat_geo_filter', 10, 2 ); function vcat_geo_filter( $clauses ){ global $wpdb, $VCAT_GEO_PI_TABLE, $post;$join = &$clauses[ 'join' ]; $join .= " LEFT JOIN $VCAT_GEO_PI_TABLE ON $VCAT_GEO_PI_TABLE.post_id = $wpdb->posts.ID"; $fields = &$clauses[ 'fields' ]; $fields .= ", $VCAT_GEO_PI_TABLE.post_id, $VCAT_GEO_PI_TABLE.lat, $VCAT_GEO_PI_TABLE.lng, $VCAT_GEO_PI_TABLE.str, $VCAT_GEO_PI_TABLE.plz, $VCAT_GEO_PI_TABLE.ort"; return $clauses;} 9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"22 23. Schritt 4: Shortcodes Groe MapMini-Mapfunction vcatDisplayPostsAtGoogleMaps( $atts ){function vcatDisplayPostsAtGoogleMaps_mini( $atts ){/**/ extract( shortcode_atts( array( /**/ 'center_lat' => $options['center_lat'], 'center_lng' => $options['center_lng'], /**/ ), $atts ) );/**/ $center_lat = $post->lat; $center_lng = $post->lng; return " /**/ "; }vcatAddMarker( " . $center_lat . ", " . $center_lng . ", '" . $post_address ."', /**/ "; }9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"23 24. Schritt 4: Shortcodes function vcatSetMarkers( $target ) { $args = array( 'post_type' => array( 'page','post' ), 'posts_per_page' => -1 ); $map_posts = new WP_Query( $args ); $out = ""; if( ! empty( $map_posts->posts ) ) { foreach( $map_posts->posts as $post ) { /**/ if( $post_lat != "" && $post_lng != "" ) { $out .= "vcatAddMarker( " . $post_lat . ", " . $post_lng . ", '" . $post_address . ' /**/ 9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"24 25. Schritt 5: Backend-Listen Spalten add_filter('manage_post_posts_columns', 'vcat_add_post_column'); add_filter('manage_page_posts_columns', 'vcat_add_post_column'); add_action('manage_posts_custom_column', 'vcat_render_post_columns', 10, 2); add_action('manage_pages_custom_column', 'vcat_render_post_columns', 10, 2); function vcat_render_post_columns($column_name) { switch ($column_name) { case 'post_address': global $post; /**/ break; } } Quick-Edit add_action('quick_edit_custom_box', 'vcat_add_quick_edit', 10, 2); add_action('save_post', 'vcat_quick_edit_save');9. November 2013WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters"25 26. Schritt 5: Backend-Listen function vcat_quick_edit_javascript() { global $current_screen; if ((($current_screen->id != 'edit-post') &&($current_screen->id != 'edit-page')) || (($current_screen->post_type != 'post') &&($current_screen->post_type != 'page'))) return; ?>