seguridad sacar restaurar respaldo plugin para importar descargar datos crear copia como php mysql wordpress woocommerce database-restore

php - sacar - restaurar copia de seguridad wordpress



Woocommerce: los archivos descargables desaparecen después de restaurar la base de datos (1)

Después de restaurar mi base de datos WordPress WooCommerce, todos los archivos descargables para mis productos virtuales han desaparecido.

He consultado la tabla wp_postmeta y veo que las entradas _downloadable_files aún están allí y he verificado que las URL en la tabla siguen siendo válidas.

Sin embargo, los archivos ya no aparecen como enlaces en los correos electrónicos de pedidos, ya no aparecen en la página Mi cuenta y ya no aparecen en la sección Archivos descargables en los Datos del producto en Editar producto .

La única solución que sé que funciona es volver a ingresar manualmente todos los archivos.

Estoy usando Apache2 y MySQL. Los archivos se almacenan en el mismo servidor Apache que está sirviendo a WordPress.

Estoy tratando de copiar una base de datos de desarrollo de un servidor de desarrollo diferente a un nuevo entorno y estoy tratando de encontrar una forma eficiente de hacerlo sin tener que volver a ingresar manualmente todos los archivos descargables.


Al profundizar en esto, creo que el problema es que WooCommerce está generando un MD5 de algo sobre la URL del archivo descargable que no se transfiere de un servidor a otro.

Al mirar los datos en la tabla wp_postmeta WordPress, veo

mysql> SELECT post_id,meta_value FROM wordpress.wp_postmeta where meta_key=''_downloadable_files''; +---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | post_id | meta_value | +---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | 33 | a:1:{s:32:"fccc91f867cc071737bea5433d1c3181";a:2:{s:4:"name";s:3:"fox";s:4:"file";s:61:"http://_123456789_.com/wp-content/uploads/2015/03/fox.png";}}

Supongo que el valor fccc91f867cc071737bea5433d1c3181 alguna manera no se reconoce como válido cuando la base de datos se transfiere a un nuevo host.

Para evitar el problema, escribí un script PHP para leer la base de datos y luego recargué los archivos descargables usando la API REST de WooCommerce a través del cliente PHP API REST WooCommerce de Gerhard Potgieter.

<?php error_reporting( E_ALL ); ini_set( ''display_errors'', ''On'' ); require_once "class-wc-api-client.php"; $consumer_key = ''ck_examplexxx''; // Add your own Consumer Key here $consumer_secret = ''cs_secretxxx''; // Add your own Consumer Secret here $store_url = ''http://123456789/''; // Add the home URL to the store you want to connect to here // Initialize the class $wc_api = new WC_API_Client( $consumer_key, $consumer_secret, $store_url ); $servername = "_dbhost_"; $username = "wordpress"; $password = "__password__"; $dbname = "wordpress"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "SELECT post_id,meta_value FROM wordpress.wp_postmeta where meta_key=''_downloadable_files''"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { $product_id = $row["post_id"]; $meta_value = $row["meta_value"]; preg_match("/.+/:/"(http:////.+//wp-content//uploads//.+//.+//(.+)/..+)/".+/", $meta_value, $m); print_r( $wc_api->update_product( $product_id, ''{ "product": { "downloads": [ { "name": "'' . $m[2] . ''", "file": "'' . $m[1] . ''" } ] } }'')); } } else { echo "0 results"; } $conn->close();