Plugin function mit verschachtelten Abfragen

Ich baue ein Plug-in aus und habe Schwierigkeiten, die function richtig zu strukturieren. Ich bin mir sicher, dass ein erfahrener Entwickler diese Frage schnell beantworten kann.

Überblick über die function

Die Postleitzahl speichert die function, prüft die Eingabe eines Feldes (Postleitzahl) und führt dann 3 aufeinanderfolgende MySQL-Abfragen aus.

Abfragelogik

Abfrage 1: Ruft die Anzahl aller Zeilen aus der benutzerdefinierten Tabelle postal_code ab. (Dies sind unsere unterstützten Postleitzahlen.)

Wenn die in das Feld eingegebene Postleitzahl nicht existiert, gehen Sie zu Abfrage 2

Abfrage 2: Überprüfen Sie die Tabelle wpdb-> prefix.code_distance (Multi-Site, also das Präfix ist sehr wichtig) und sehen Sie, ob es bereits einen Eintrag für die Postleitzahl gibt.

Wenn die Postleitzahl nicht existiert, müssen wir zu Abfrage 3 gehen, um die Abstände zu erhalten, indem wir eine function aufrufen und dann die Ergebnisse dieser function in die Tabelle wpdb-> prefix.code_distance einfügen.

Hintergrund: Ursprünglich wurde dies alles aus einer gespeicherten Prozedur aufgerufen, aber als ich es in eine Multi-Site-Implementierung verschoben habe, funktionierte es aufgrund des Präfix-Problems nicht mehr. Unglücklicherweise mag MYSQL meine Versuche nicht, die Präfix-Variable zu übergeben, und es scheint auch, dass, selbst wenn ich eine vorbereitete statement verwende, dass INSERT INTO nicht richtig funktioniert, ich also alles in Abfragen in PHP einfüge.

Hier ist das Code-Snippet für die function.

function postcodes_save($post_id) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; if (!isset($_POST['postcodes_nonce']) || !wp_verify_nonce($_POST['postcodes_nonce'], '_postcodes_nonce')) return; if (!current_user_can('edit_post', $post_id)) return; if (isset($_POST['postcode'])) { update_post_meta($post_id, 'postcode', esc_attr(str_replace(' ', '', $_POST['postcode']))); /*Lets check to see if the postcode the user input is in the postal_code table */ global $wpdb; $sql = $wpdb->query($wpdb->prepare(SELECT count(*) FROM postal_code WHERE code = 'postcode' LIMIT 1)); $result = $wpdb->query($sql); if ($result->num_rows == 0) { global $wpdb; $sql1 = $wpdb->query($wpdb->prepare(SELECT count(*) INTO ct FROM $wpdb->prefix.code_distance WHERE store_code = store_code_in LIMIT 1)); $result2 = $wpdb->query($sql1); // run query if ($result2 >0) { die; } } else { // Lets populate our distance table so we can calculate delivery charges global $wpdb; $opts = get_option('woocommerce_store_shipping_settings'); $range = $opts['ranges']; $wpdb->query($wpdb->prepare(INSERT INTO $wpdb->prefix.code_distance(store_code, search_code, distance) SELECT store_code_in, code, fn_haversine(lat, lng, latitude, longitude) as distance FROM postal_code HAVING distance < $range), $_POST['postcode'], $range); } } } add_action('save_post', 'postcodes_save'); 

Hier ist die Grundstruktur der beiden Tabellen, die ich verwende.

Benutzerdefinierte Tabelle: postal_code

 # id, code, latitude, longitude '1', 'AB101AA', '57.148235', '-2.096648' '2', 'AB101AB', '57.149609', '-2.096916' 

Benutzerdefinierte Tabelle: WPDB-> Prefix.code_distance (Auch dies ist Multi-Site, so dass das Präfix geändert wird)

 # id, store_code, search_code, distance '1', 'OL70LY', 'OL66AE', '0.7141238771925222' '2', 'OL70LY', 'OL66AH', '0.831756909154076' 

Solutions Collecting From Web of "Plugin function mit verschachtelten Abfragen"