Hola espero me puedan ayudar, estoy tratando de realizar un autocompletado del formulario de facturación en Woocommerce con una tabla creada en la base de datos de WordPress. El problema es que cuando activo mi plugin se vuelve todo demasiado lento. La tabla tiene 154,451 registros. Comparto el código de mi plugin y espero alguien me pueda ayudar para entender qué estoy haciendo mal.
<?php
/**
* Plugin Name: Autocompletar Direccion con Codigo Postal
* Plugin URL:
* Description: Busca codigo postal en tabla de sepomex para autompletar direccion de envio
* Version: 1.0.0
* Author: Jesus Mares
* Author URI:
* Requires PHP: 7.3
* WC requires at least: 6.0
*
*/
$items = [];
function my_data( $content ) {
$slug_page = 'checkout'; //slug page where show data
$table_name = 'wp_sepomex'; // custom table name
$items_per_page = 0; // quantity per page
if ( is_page($slug_page) ){
global $wpdb;
global $items;
$search_condition = '';
$search = $_REQUEST['search']??'';
if ( $search ) $search_condition = "WHERE `codigo_postal` like '%$search%'";
$start_number = $_REQUEST['start']??0;
if ( $start_number < 0 || ! is_numeric( $start_number ) ) $start_number = 0;
// Count items
$sql = "SELECT COUNT(*) FROM `$table_name` $search_condition";
$count = $wpdb->get_var($sql);
if($count <= 0){
echo "<script> alert('Código Postal Incorrecto');</script>";
}
// Items
$sql = "SELECT * FROM `$table_name` $search_condition";
$items = $wpdb->get_results($sql);
$content .= search($search);
}
return $content;
}
add_filter( 'the_content', 'my_data' );
function search($search){
return '<form method="get">
<input type="search" minlength="2" placeholder="Ingresa el codigo postal" name="search" value="'.$search.'">
<input type="submit" value="Buscar">
</form>';
}
function my_fields($fields) {
$fields['billing']['billing_address_1']['type'] = 'select';
$colonias = [];
// field names
global $items;
//var_dump($items);
foreach ($items as $item) {
$fields['billing']['billing_country']['options'] = 'México';
array_push($colonias,$item->colonia);
$fields['billing']['billing_postcode']['default'] = $item->codigo_postal;
$fields['billing']['billing_address_1']['options'] = $colonias;
$fields['billing']['billing_county']['default'] = $item->municipo;
$fields['billing']['billing_state']['options'] = $item->estado;
$fields['billing']['billing_city']['default'] = $item->ciudad;
}
return $fields;
}
add_filter( 'woocommerce_checkout_fields', 'my_fields' );