2016-03-23 7 views
3

TL; DR - Wie verknüpfe ich Informationen aus verschiedenen Tabellen, um eine API für ein Plugin zu erstellen.Erstellen einer WordPress-API, die mehrere Tabellen aufruft

Um zu geben, was ich tue. Wir bauen eine App und eine Website für ein Fitness-Studio, die App, für den Moment, zieht nur Blogposts, Kalenderaktivitäten, ermöglicht es ihnen, die Aktivitäten zu ihrem Telefon hinzuzufügen, und eine Beschreibung der Einrichtung, während die Website mehr geht ausführlich über das Fitnessstudio, die Trainer und alle möglichen Ereignisse. Es wurde entschieden, dass wir Wordpress für das Admin-Panel für die Website und die App verwenden sollten, so dass sie nur die Arbeit an einem Ort erledigen müssen.

Für die App verwende ich WP REST API v2, um die Blog-Posts einzuziehen, was der einfache Teil ist. Aber der Kalender ist extrem schwierig geworden. Das Thema, das wir gekauft haben, ist Symetrio Gym and Fitness, das mit einem Kalender geliefert wird, den wir verwenden können, und es entspricht fast dem, was wir in der App verwendet haben. Also müssen wir die Daten, die in den Kalender eingegeben wurden, einholen und einen API-Aufruf in der App verwenden, um die Daten anzuzeigen.

So hier ist, wo die Dinge kompliziert werden, verwendet der Kalender mehrere Tabellen, um alle seine Daten zu ziehen. Für den Trainer, die Klassen und den Raum wird ein benutzerdefinierter Beitragstyp erstellt, der nur den Namen des Trainers, der Klasse oder des Raums enthält. Für die Daten und Zeiten und die Daten, auf die sie verweist, werden jedoch zwei separate Tabellen verwendet, eine mit dem Namen "schedule_ap_multi", die das Datum, die Referenz-ID und die ID der Klasse enthält, auf die in Posts verwiesen wird.

Die nächste Tabelle heißt schedule_ap_multi_fields und hat die Startzeit, die Endzeit, die ID, die darauf verweist, welche Zeile in schedule_ap_multi verwendet wird, die ID des Raumposts, die ID des Trainers und eine Beschreibung des Aktivität, aber diese sind alle in einer eigenen Zeile, die einzige Sache, die wirklich sie zusammen in der ID für schedule_ap_multi binden.

Hier sind einige Bilder, wie die beiden Tabellen eingerichtet sind.

schedule_api_multi

schedule_api_multi_fields

Ich begann eine API für den Kalender zu bauen, aber ich kann keine Daten aus den Tabellen erhalten, es scheint, dass ich nur Daten von Posts bekommen, und da die Termine und Start- und Endzeit sind keine Beiträge, es ist schwierig, sie zu bekommen. für das JSON-Objekt Ich schaffe es ist wie folgt strukturiert:

protected function make_data($post, $data) { 

global $wpdb; 

$classesID = $wpdb->get_results('SELECT ID FROM wp_wtr_schedule_ap_multi',ARRAY_A); 
$classes = $wpdb->get_results('SELECT * FROM wp_posts WHERE post_type = "classes"',OBJECT); 

$date = $wpdb->get_results('SELECT * FROM wp_wtr_schedule_ap_multi'); 
$data[ $post->ID ] = array(
      'title'    => 'the title', 
      'type'    => $post->post_type, 
      'room'    => 'the room', 
      'instructor'  => 'the instructor', 
      'description'  => 'the description', 
      'start_date'  => 'start date', 
      'end_date'   => 'end date', 
      'image'    => 'image', 
      'style'    => 'style', 
    }; 
    return $date; 

wenn ich post- $ tun> es nur die post_type der Beiträge wird, und es ist eine Herausforderung gewesen, eine andere post_type bekommen, der kein Beitrag ist, wenn ich eine der wpdb Befehle verwenden, erhalte ich die Abfrage zurück, aber ganz, und nur, wenn ich es als eine der JSON-Objekte verwenden, wird es nicht ein Array zurück, wenn ich es

$data[ here ]=array()

in

setzen

Was ich zu tun versuche, zusammenzufassen, ist, all diese Objekte zu verbinden, hoffentlich einen api - Aufruf zu machen und den Kalender auf der App - Seite auszufüllen, um den Daten, die ich für jede in WordPress erstellte Aktivität benötige. Ich habe jetzt einen kompletten Verlust von dem, was ich tun muss, und niemand sonst in meinem Team hat Erfahrung mit Wordpress-Plugins oder erstellt eine benutzerdefinierte API für WordPress.

Antwort

0

Also nach einigen 1-on-1 mit einem Teilzeit-Senior-Entwickler, wo ich arbeite, haben wir es endlich herausgefunden. Hier ist unsere Lösung.

protected function make_data() { 

     global $wpdb; 

     $date = date("Y-m-d");//returns current date in Year-Month-Day format 
     $queryResult = $wpdb->get_results("SELECT wp_wtr_schedule_ap_multi.id ,wp_posts.post_title, wp_wtr_schedule_ap_multi.date FROM wp_wtr_schedule_ap_multi INNER JOIN wp_posts ON wp_wtr_schedule_ap_multi.id_classes=wp_posts.ID WHERE wp_wtr_schedule_ap_multi.date >= '$date'");//Only pulls date on or after current date, so we don't pull everything back at once. 

     $data = array(); 

     foreach ($queryResult as $post) { 
      $fields = $wpdb->get_results("SELECT * FROM wp_wtr_schedule_ap_multi_fields WHERE id_ap_multi ='$post->id' ");// gets all th essential data from multi_fields that is associated with ID 
      $trainNum = $fields[5]->value; //recieves Trainer ID for regex 
      $trainerNum = preg_replace('/[^0-9]/s', '', $trainNum);//pulls out the random ";" and returns just the trainer number 
      $trainer = $wpdb->get_row("SELECT * FROM wp_posts WHERE ID = '$trainerNum'");//gets all the data from the trainer row number 
      $roomNum = $fields[4]->value;//gets the room number, for query function. did not like $fields[4]->value for some reason 
      $room = $wpdb->get_row("SELECT * FROM wp_posts WHERE ID = '$roomNum' ");//returns the row info for the room id 

      $class_data = array( ); 
      $class_data['_id'] = $post->id; 
      $class_data['title'] = $post->post_title; 
      $class_data['room'] = $room->post_title; 
      $class_data['instructor'] = $trainer->post_title; 
      $class_data['start'] = date("{$post->date} {$fields[0]->value}:{$fields[1]->value}:00.000Z"); 
      $class_data['end'] = date("{$post->date} {$fields[2]->value}:{$fields[3]->value}:00.000Z"); 

      //$class_data['ref'] = $fields;//used to reference items returned 
      $data[] = $class_data; 
     }; 
    return $data; 
    } 

die Lösung funktioniert, This ist unser Bezugspunkt dafür, wie wir geschaffen, um die API und Endpunkte mit dem Kalender-Plugin zu kommunizieren. Ich habe noch ein paar Dinge, die ich anrufen muss, aber ansonsten funktioniert es ziemlich gut. Es ist eine große Trägheit, wenn ich telefoniere, also muss ich irgendwann darauf zurückkommen, um zu sehen, ob ich es aufräumen kann, damit ich nicht so viele Anrufe mache, aber es scheint mir unvermeidlich. Aber ich bin wahrscheinlich falsch.

Verwandte Themen