Plugin-Entwicklung mit eigenen Tabellen,
Backend-Widgets und Query-Filters
am Beispiel des GEO-Plugins der VCAT EDULABS
Inhalt
• die VCAT EDULABS
– Wer, Was, Wieso, Weshalb, Warum?

• das GEO-Plugin
– Sinn & Zweck
– Anwendung
– Historie & Aus...
Ausbildung am lebenden Objekt

DIE VCAT EDULABS

9. November 2013

WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit e...
VCAT Consulting GmbH
• seit 1999 in der SoftwareEntwicklung tätig

• Leistungsspektrum

– Konzentration auf das
Kerngeschä...
VCAT EDULABS
• Philosophie: Fachkräftesicherung durch
Aus- und Weiterbildung
– Seit 2007 Ausbildungsbetrieb für den Beruf ...
Unser erstes Projekt

DAS GEO-PLUGIN

9. November 2013

WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabe...
Sinn & Zweck
• Artikel und Seiten können mit Adressdaten versehen
werden, z.B.
– Ort einer Veranstaltung
– Ort, an dem ein...
Anwendung I
• Installation
– Plugin im WordPress Repository:
VCAT EDULABS Posts at Google Maps
– Suchen, finden & wie gewo...
Anwendung II
• Shortcodes mit Attributen
Große Map

Mini-Map

[vcat-dpagm]

[vcat-dpagm-mini]

Breite

X

X

width=„250px“...
Einstellungsseite
Im WordPress Backend zur Festlegung der Standardweitere aller ShortcodeAttribute

9. November 2013

WP C...
Backend-Widget
Im Bearbeitungsmodus von Artikeln und Seiten

9. November 2013

WP Camp 2013 Berlin - Session "Plugin-Entwi...
Bearbeitung der GEO-Daten
Im QuickEdit-Modus von Seiten & Artikeln

9. November 2013

WP Camp 2013 Berlin - Session "Plugi...
Mini-Map
In der Anwendung in einem Artikel

9. November 2013

WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigene...
Große Karte
Mit allen Artikeln und Seiten

9. November 2013

WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen...
Historie & Ausblick
Historie

Ausblick

• GEO-Daten für Artikel

• Frei wählbare Pins pro Artikel
und Seite
• Genaue Posit...
Action-Hooks, Filter API und mehr
Robin Kramer

DER EINSATZ VON
BACKEND-WIDGETS UND QUERY-FILTERS
9. November 2013

WP Cam...
Schritt 1: eigene Tabelle
register_activation_hook( __FILE__, 'vcat_db_install' );
function vcat_db_install() {
global $wp...
Schritt 2: Backend-Widget
add_action( 'add_meta_boxes', 'vcat_custom_fields_init' );
function vcat_custom_fields_init() {
...
Schritt 2: Backend-Widget
function vcat_custom_fields_setup() {
global $post;
$args = array( 'post_type' => array( 'page',...
Schritt 2: Backend-Widget
• Speichern
add_action( 'save_post', 'vcat_custom_fields_save' );

• Löschen
add_action( 'delete...
Schritt 3: Query-Filters
• Filter-Hooks für die WP_Query
– posts_where_paged
– posts_groupby
– posts_join_paged
– posts_or...
Schritt 3: Query-Filters
add_filter( 'posts_clauses', 'vcat_geo_filter', 10, 2 );
function vcat_geo_filter( $clauses ){
gl...
Schritt 4: Shortcodes
Große Map

Mini-Map

function vcatDisplayPostsAtGoogleMaps( $atts ){

function vcatDisplayPostsAtGoo...
Schritt 4: Shortcodes
function vcatSetMarkers( $target ) {
$args = array( 'post_type' => array( 'page','post' ),
'posts_pe...
Schritt 5: Backend-Listen
• Spalten
add_filter('manage_post_posts_columns', 'vcat_add_post_column');
add_filter('manage_pa...
Schritt 5: Backend-Listen
function vcat_quick_edit_javascript() {
global $current_screen;
if ((($current_screen->id != 'ed...
Schritt 5: Backend-Listen
function vcat_expand_quick_edit_link($actions, $post) {
global $current_screen;
$nonce
$str =
$p...
Q/A – Fragen & Antworten
Dem QR-Code folgen und diese Präsentation online sehen…

9. November 2013

WP Camp 2013 Berlin - ...
Kontakt
• EDULABS – ein Projekt der
VCAT Consulting GmbH
• August-Bebel-Straße 26-53
MedienHaus
14482 Potsdam
• T: +49 (33...
Upcoming SlideShare
Loading in...5
×

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

613
-1

Published on

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

Published in: Technology
1 Comment
1 Like
Statistics
Notes
  • http://www.sendspace.com/file/8kn03w
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
613
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
3
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. Plugin-Entwicklung mit eigenen Tabellen, Backend-Widgets und Query-Filters am Beispiel des GEO-Plugins der VCAT EDULABS
  2. 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 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 2
  3. 3. Ausbildung am lebenden Objekt DIE VCAT EDULABS 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" Nico Danneberg 3
  4. 4. VCAT Consulting GmbH • seit 1999 in der SoftwareEntwicklung tätig • Leistungsspektrum – Konzentration auf das Kerngeschäft: • Fokus Internet • Kreativleistungen nur über Partner • seit 2006 eigenständige GmbH mit Sitz in Potsdam-Babelsberg • Durchschnittliches Wachstum von 20% • 15 Mitarbeiterinnen und Mitarbeiter • heterogene Kundenstruktur 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 4
  5. 5. VCAT EDULABS • Philosophie: Fachkräftesicherung durch Aus- und Weiterbildung – Seit 2007 Ausbildungsbetrieb für den Beruf des / der Mathematisch-technischen Softwareentwicklers/in – Praxis- & Projektorientierte Ausbildung • Gründung der VCAT EDULABS mit Fokus auf OpenSource-Anwendungen (WordPress, Typo3, vTiger, u.a.) – Reale Projekte mit „echtem“ Kundenkontakt – Wissensrückfluss in die Community – Öffentliche Referenzen  Erhöhung der Reichweite 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 5
  6. 6. Unser erstes Projekt DAS GEO-PLUGIN 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" Daniel Dziamski 6
  7. 7. Sinn & Zweck • Artikel und Seiten können 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 „Sprechblase“ 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 7
  8. 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 für GEO-Plugin 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 8
  9. 9. Anwendung II • Shortcodes mit Attributen Große Map Mini-Map [vcat-dpagm] [vcat-dpagm-mini] Breite X X width=„250px“ width=„75%“ Höhe X X height=„100px“ Zentrum X - center=„August-Bebel-Str. 26-53 14482 Potsdam“ Zoom X X zoom=„10“ Ziel X X target=„blank“ Ausrichtung X X align=„left“ Shortcode 9. November 2013 Beispiel - WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 9
  10. 10. Einstellungsseite Im WordPress Backend zur Festlegung der Standardweitere aller ShortcodeAttribute 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 10
  11. 11. Backend-Widget Im Bearbeitungsmodus von Artikeln und Seiten 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 11
  12. 12. Bearbeitung der GEO-Daten Im QuickEdit-Modus von Seiten & Artikeln 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 12
  13. 13. Mini-Map In der Anwendung in einem Artikel 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 13
  14. 14. Große Karte Mit allen Artikeln und Seiten 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 14
  15. 15. Historie & Ausblick Historie Ausblick • GEO-Daten für Artikel • Frei wählbare Pins pro Artikel und Seite • Genaue Positionierung per Drag‘n‘Drop im Backend • Filter als Attribute für den Shortcode – Benutzer-definierte Variablen • und Kategorien – Meta-Daten für Kategorien nur mit extra Plugin möglich 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 15
  16. 16. Action-Hooks, Filter API und mehr Robin Kramer DER EINSATZ VON BACKEND-WIDGETS UND QUERY-FILTERS 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 16
  17. 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 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" ( 17
  18. 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 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 18
  19. 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 '<input type="hidden" name="vcat_custom_fields_nonce" value="' . wp_create_nonce( __FILE__ ) . '" />'; } 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 19
  20. 20. Schritt 2: Backend-Widget • Speichern add_action( 'save_post', 'vcat_custom_fields_save' ); • Löschen add_action( 'delete_post', 'vcat_delete_data' ); 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 20
  21. 21. Schritt 3: Query-Filters • Filter-Hooks für die WP_Query – posts_where_paged – posts_groupby – posts_join_paged – posts_orderby – posts_distinct – post_limits – posts_fields • posts_clauses – Filter für alle Query-Elemente 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 21
  22. 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 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 22
  23. 23. Schritt 4: Shortcodes Große Map Mini-Map function 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 " /*…*/ <script type='text/javascript'> /*…*/ vcatInitialize( " . $center_lat . ", " . $center_lng . ", " . $zoom . "); return " /*…*/ <script type='text/javascript'> /*…*/ vcatInitialize( " . $center_lat . ", " . $center_lng . ", " . $zoom . "); " . vcatSetMarkers( $target ) . " </script> "; } vcatAddMarker( " . $center_lat . ", " . $center_lng . ", '" . $post_address ."', /*…*/ </script> "; } 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 23
  24. 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 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 24
  25. 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 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 25
  26. 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; ?> <script type="text/javascript"> function insert_data(str, plz, ort, nonce) { inlineEditPost.revert(); var strInput = document.getElementById('quick_edit_str'); /*…*/ strInput.value = str; /*…*/ } </script> <?php } 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 26
  27. 27. Schritt 5: Backend-Listen function vcat_expand_quick_edit_link($actions, $post) { global $current_screen; $nonce $str = $plz = $ort = = wp_create_nonce( /*…*/ ); $post->str; $post->plz; $post->ort; $actions['inline hide-if-no-js'] = '<a href="#" class="editinline" title="' . esc_attr( __( 'Edit this item inline' ) ) . '" ‚ . " onclick="insert_data('{$str}',/*…*/')">„ . __( 'Quick&nbsp;Edit' ) . '</a>'; return $actions; } 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 27
  28. 28. Q/A – Fragen & Antworten Dem QR-Code folgen und diese Präsentation online sehen… 9. November 2013 WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 28
  29. 29. Kontakt • EDULABS – ein Projekt der VCAT Consulting GmbH • August-Bebel-Straße 26-53 MedienHaus 14482 Potsdam • T: +49 (331) 721339 - 0 F: +49 (331) 721339 - 2 W: vcat.de/edulabs M: edulabs@vcat.de 9. November 2013 Lassen Sie uns in Kontakt bleiben: F G S T W X facebook.com/VCATconsulting gplus.to/VCATconsulting slideshare.net/VCATconsulting twitter.com/VCATconsulting ( #edulabs ) http://profiles.wordpress.org/VCATconsulting xing.com/companies/vcatconsultinggmbh WP Camp 2013 Berlin - Session "Plugin-Entwicklung mit eigenen Tabellen, BackendWidgets und Query-Filters" 29
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×