Soporte » WordPress Avanzado » Velocidad de WordPress

  • Hola,
    Estoy haciendo una web con WordPress de un hotel y a parte de la parte pública, tengo un pluguin para que los administrativos puedan manejar el motor de reservas que hay. El problema es que una consulta de php que he hecho para poder actualizar los precios y la disponibilidad, me tarda en cargarse 55 segundos. He hecho la misma consulta fuera de WordPress haciendo una prueba y tarda tan solo 2 segundos.
    Ya he puesto cache, optimizado imágenes, base de datos y todo lo que es necesario pero con WordPress sigue sin tirar y es desesperante y claro mi jefe no quiere que tarde 55 segundos cada vez que quieres actualizar un precio.
    Hay alguna opción para resolver esto o entonces tendré que dejar wordpress y utilizar algún framework?
    Gracias,

    Gemma

Viendo 10 respuestas - de la 1 a la 10 (de un total de 10)
  • Hola Gemma,
    Para poder ayudarte mejor, puedes detallar qué plugin estas usando para las reservas y cómo estas realizando las consultas y actualización de datos?
    Cabe decir que WordPress no hace uso del cache desde el admin.

    Iniciador del debate gpinyol10

    (@gpinyol10)

    El plugin lo he creado yo misma, es decir no es de WordPress.

    ok, puedes pegar el código que te está dando problemas?

    Gracias,
    Lucy

    Iniciador del debate gpinyol10

    (@gpinyol10)

    <?php
    include ('funciones.php');
    $conn=conexion();
    
    $id_habitacion=$_POST['id_habitacion'];
    $id_hotel=$_POST['id_hotel'];
    $disponibilitat=$_POST['disponibilidad'];
    $dataActual=$_POST['dataActual'];
    $dataFinal=$_POST['dataFinal'];
    $llegada=$_POST['dataActual'];
    $salida=$_POST['dataFinal'];
    $precio=$_POST['precio'];
    $id_tarifa=$_POST['id_tarifa'];
    $descripcion=$_POST['descripcion'];
    $estado=$_POST['estado'];
    $estanciaMinima=$_POST['estanciaMinima'];
    $CTA=$_POST['cta'];
    $CTD=$_POST['ctd'];
    
    for ($i=0; $i<count($CTA); $i++) {
        if ($CTA[$i]=="Y") {
            unset($CTA[$i+1]);
        }
    }
    $cta=array_values($CTA);
    
    for ($i=0; $i<count($CTD); $i++) {
        if ($CTD[$i]=="Y") {
            unset($CTD[$i+1]);
        }
    }
    $ctd=array_values($CTD);
    
    for ($i=0; $i<count($disponibilitat); $i++) {
        $query="Select * from cantidad where data='".$dataActual."' and id_habitacio='".$id_habitacion."'";
        $result=mysqli_query($conn, $query);
        $count=mysqli_num_rows($result);
        if ($count==0) {
            $insertar="INSERT INTO cantidad VALUES ('', '".$id_habitacion."', '".$id_hotel."', '".$dataActual."', '".$disponibilitat[$i]."',0)";
            $result=mysqli_query($conn, $insertar);
        } else {
            $sql = "UPDATE cantidad SET cantidad='".$disponibilitat[$i]."' where data='".$dataActual."' and id_habitacio='".$id_habitacion."'";
            mysqli_query($conn, $sql);
        }
        $nuevafecha = strtotime ( '+ 1day' , strtotime ( $dataActual ) ) ;
        $nuevafecha = date ( 'Y-m-j' , $nuevafecha );
        $dataActual=$nuevafecha;
    }
    
    $dataActual=$_POST['dataActual'];
    $id_tarifaAnterior=$id_tarifa[0];
    $cantidad="select capacidad from  habitaciones where id_hotel='".$id_hotel."' and id_habitacion='".$id_habitacion."' and idioma='es'";
    $cantidad2=mysqli_query($conn, $cantidad);
    $cantidad3=mysqli_fetch_assoc($cantidad2);
    for ($i=0; $i<count($precio); $i++) {
        if ($precio[$i]=="") {
            $precio[$i]=0;
        }
        if ($id_tarifaAnterior!=$id_tarifa[$i]) {
            $dataActual=$_POST['dataActual'];
        }	
    
    	$query="Select id_precio from precios where id_tarifa='".$id_tarifa[$i]."' and id_hotel='".$id_hotel."' and data='".$dataActual."' and id_habitacion='".$id_habitacion."'";
    	$result=mysqli_query($conn, $query);
    	$count=mysqli_num_rows($result);
    	$arr_select=mysqli_fetch_assoc($result);
    		if ($cta[$i]=='Y') {
    			$cta[$i]='1';
    		} else {
    			$cta[$i]='0';
    		}
    		if ($ctd[$i]=='Y') {
    			$ctd[$i]='1';
    		} else {
    			$ctd[$i]='0';
    		}
    
    	if ($count==0) {
    		$insertar2="INSERT INTO precios VALUES ('', '".$id_tarifa[$i]."','".$id_hotel."', '".$id_habitacion."', '".$dataActual."', '".$precio[$i]."','', '" . $estanciaMinima[$i] . "', '" . $cta[$i] . "', '" . $ctd[$i] . "')";
    		mysqli_query($conn, $insertar2);
    	} else {
    		$sql2 = "UPDATE precios set precio ='" . $precio[$i] . "', estanciaMinima ='" . $estanciaMinima[$i] . "', CTA ='" . $cta[$i] . "', CTD ='" . $ctd[$i] . "' where id_precio='".$arr_select['id_precio']."'";
    		mysqli_query($conn, $sql2);
    
    	}
    
    	$sql4="select * from descuentos where id_tarifa='".$id_tarifa[$i]."' and id_hotel='".$id_hotel."'";
    	$res4=mysqli_query($conn, $sql4);
    	if (mysqli_num_rows($res4)>0) {
    		while ($arr4=mysqli_fetch_assoc($res4)) {
    			$sql5="select * from precios where id_tarifa='".$arr4['deTarifa']."' and id_hotel='".$id_hotel."' and id_habitacion='".$id_habitacion."'";
    			$res5=mysqli_query($conn, $sql5);
    			while ($arr5=mysqli_fetch_assoc($res5)) {
    				$precioTotal=0;
    				if ($arr4['aplicar']=='completo') {
    					if ($arr4['descuento']=='suma') {
    						if ($arr4['unidad']==0) {
    							$por=(($arr4['valor']*$arr5['precio'])/100);
    							$precioTotal=$arr5['precio']+$por;
    						} else if ($arr4['unidad']==1) {
    							$precioTotal=$arr5['precio']+$arr4['valor'];
    						}
    
    					} else if ($arr4['descuento']=='resta') {
    						if ($arr4['unidad']==0) {
    							$por=(($arr4['valor']*$arr5['precio'])/100);
    							$precioTotal=$arr5['precio']-$por;
    						} else if ($arr4['unidad']==1) {
    							$precioTotal=$arr5['precio']-$arr4['valor'];
    						}
    					} 
    
    				} else {
    					$habita="select capacidad from habitaciones where id_habitacion='".$id_habitacion."' and idioma='es' and id_hotel='".$id_hotel."'";
    					$habita1=mysqli_query($conn, $habita);
    					$habita2=mysqli_fetch_assoc($habita1);
    					if ($arr4['descuento']=='suma') {
    						if ($arr4['unidad']==0) {
    							$por=(($arr4['valor']*($arr5['precio']*$habita2['capacidad']))/100);
    							$precioTotal=$arr5['precio']+$por;
    						} else if ($arr4['unidad']==1) {
    							$precioTotal=$arr5['precio']+($arr4['valor']*$habita2['capacidad']);
    						}
    					} else if ($arr4['descuento']=='resta') {
    						if ($arr4['unidad']==0) {
    							$por=(($arr4['valor']*($arr5['precio']*$habita2['capacidad']))/100);
    							$precioTotal=$arr5['precio']-$por;
    						} else if ($arr4['unidad']==1) {
    							$precioTotal=$arr5['precio']-($arr4['valor']*$habita2['capacidad']);
    						}
    					}
    				}
    
    				if ($arr4['desde']!='0000-00-00') {
    					if(strtotime($arr5['data'])>=strtotime($arr4['desde']) && strtotime($arr5['data'])<=strtotime($arr4['hasta'])) {
    						$check="select id_precio from precios where id_tarifa='".$arr5['id_tarifa']."' and id_habitacion='".$id_habitacion."' and id_hotel='".$id_hotel."' and data='".$arr5['data']."'";
    						$check2=mysqli_query($conn, $check);
    						if (mysqli_num_rows($check2)==0) {
    							$insert="insert into precios VALUES ('','".$arr4['id_tarifa']."','".$id_hotel."', '".$id_habitacion."', '".$arr5['data']."', '".$precioTotal."', '0', '0', '0', '0')";
    							mysqli_query($conn, $insert);
    						} else {
    							$update="update precios set precio='".$precioTotal."' where id_tarifa='".$arr4['id_tarifa']."' and id_hotel='".$id_hotel."' and data='".$arr5['data']."' and id_habitacion='".$id_habitacion."'";
    							mysqli_query($conn, $update);
    						}
    					}
    				} else {
    					$check="select id_precio from precios where id_tarifa='".$arr5['id_tarifa']."' and id_habitacion='".$id_habitacion."' and id_hotel='".$id_hotel."' and data='".$arr5['data']."'";
    					$check2=mysqli_query($conn, $check);
    					if (mysqli_num_rows($check2)==0) {
    						$insert="insert into precios VALUES ('','".$arr4['id_tarifa']."','".$id_hotel."', '".$id_habitacion."', '".$arr5['data']."', '".$precioTotal."', '0', '0', '0', '0')";
    						mysqli_query($conn, $insert);
    					} else {
    						$update="update precios set precio='".$precioTotal."' where id_tarifa='".$arr4['id_tarifa']."' and id_hotel='".$id_hotel."' and data='".$arr5['data']."' and id_habitacion='".$id_habitacion."'";
    						mysqli_query($conn, $update);
    					}
    				}
    			}
    		}
    	}
    
        $nuevafecha = strtotime ( '+ 1day' , strtotime ( $dataActual ) ) ;
        $nuevafecha = date ( 'Y-m-j' , $nuevafecha );
        $dataActual=$nuevafecha;
        $id_tarifaAnterior=$id_tarifa[$i];
    }
    
    echo '<script>';
    echo 'var url=window.location.href;';
    echo 'var separar=url.split("wp-content/");';
    echo 'window.location.href = separar[0]+"wp-admin/admin.php?page=disponibilidad_habitaciones&action=habitacion&id_hotel='.$id_hotel.'&id_habitacion='.$id_habitacion.'&llegada='.$llegada.'&salida='.$salida.'"';
    echo '</script>';

    Lo que hago es coger todos los inputs que tengo en la página anterior de todo un mes, de cada dia hay la disponibilidad, el precio, la estancia mínima, CTA y CTD, entonces inserto cada uno de ellos

    Hola Gema,
    Es recomendable que uses las funciones y objetos nativos que te ofrece WordPress para interactuar con la base de datos.

    Para consultas WordPress te facilita la API WP_Query
    https://codex.wordpress.org/Class_Reference/WP_Query

    Pero si tienes la necesidad de escribir tus propias consultas SQL haz uso de la global $wpdb, aquí tienes ejemplos https://codex.wordpress.org/Class_Reference/wpdb, aquí cabe destacar el uso de $wpdb->prepare para mayor seguridad en las queries.

    Por otro lado no es recomendable crear tus propias tablas personalizadas en la base de datos a no ser que sea absolutamente necesario, pero yo trataría de migrar los datos para hacer uso de las propias tablas de WordPress.

    Un saludo,
    Lucy

    Iniciador del debate gpinyol10

    (@gpinyol10)

    Hola,
    Tu crees que eso puede causar la lentitud? Si ejecuto ese ficheor fuera de WordPress me va muy rápido, asi que no creo que el archivo esté mal.
    A qué te refieres a que utilize las tablas de WordPress?
    Gracias,

    Gemma

    gpinyol10 me puedes dar la pagina del hotel y mostrarme lo que quieres modificar… el problema de tu plugin es que no usas ninguna funcion de wordpress estas haciendo conexiones a base de datos fuera de wp por ahi hay un problema de seguridad y optimizacion..

    Iniciador del debate gpinyol10

    (@gpinyol10)

    Hola Condence,
    el problema es que las páginas que me van lentas son una parte privada que mi jefe no me deja enseñarlo, ya que necesitas usuario y contraseña para poder entrar.
    Pero una de las páginas es el código que pegué arriba.
    Entonces programar con php tal y como sé en WordPress causa lentitud? Me podrías indicar o decir alguna web para como optimizar mis consultas y programación de php y mysql para wordPress?
    Muchas gracias,

    Gemma

    gpinyol10 que tal mira si estas usando la misma mysql puedes hacerlo con wordpress busca custom fields funciones como add_meta_box, update_post_meta, delete_post_meta..

    ahora si estas usando una mysql fuera de wordpress lo ideal es que hagas una API REST…

    si me puedes dar mas detallado de lo que quiere hacer porque no entendí muy bien le puedo decir cual es su mejor opción..

    WordPress te deja crear modificar editar eliminar tablas de una manera muy fácil con funciones.

    En su codigo veo que hace una conexion mysql puede usar la que ya esta con wordpress para que no haga 2 conexiones usando

    global $wpdb;

    la variable $wpdb seria su $conn ya no haría 2 conexiones

    Aquí esta toda la información para usar $wpdb;

    viendo su código ya entiendo un poco lo que quiere hacer..

    Como yo haría las reservaciones con wordpress

    • 1.- Para el sistema de reservaciones de cuartos usuaria el sistema de entradas de wordpress simplemente en privado… y agregaría campos personalizados con las variables que se usen en las reservaciones (dia,precio,nombre,etc). lea un poco de add_meta_box
    • 2.- El precio de habitaciones puede usar la funcion add_option
      crearías la variable $precio_habitacion y simplemente la modificas rapidísimo con la función update_option

    las funciones add_option, update_option, delete_option te puede servir mucho..

Viendo 10 respuestas - de la 1 a la 10 (de un total de 10)
  • El debate ‘Velocidad de WordPress’ está cerrado a nuevas respuestas.