Woocommerce: загружаемые файлы исчезают после восстановления базы данных

После восстановления моей базы данных WordPress WooCommerce все Загружаемые файлы для меня исчезли виртуальные продукты.

Я спросил wp_postmeta стол и увидеть, что _downloadable_files записи все еще там, и я проверил, что URL-адреса в таблице все еще действительны.

Однако файлы больше не отображаются в виде ссылок в электронных письмах, больше не отображаются в Мой аккаунт и больше не отображаются в Загружаемые файлы раздел в Данные продукта в Редактировать продукт.

Единственное исправление, которое, как я знаю, работает, — это вручную повторно ввести все файлы.

Я использую Apache2 и MySQL. Файлы хранятся на том же сервере Apache, который обслуживает WordPress.

Я пытаюсь скопировать базу данных разработки с другого сервера разработки в новую среду
и я пытаюсь найти эффективный способ сделать это без необходимости повторного ввода всех загружаемых файлов вручную.

0

Решение

Копаясь в этом, я думаю, что проблема в том, что WooCommerce генерирует MD5 чего-то из URL загружаемого файла, который не переносится с одного сервера на другой.

Глядя на данные в WordPress wp_postmeta таблица, я вижу

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";}}

Я думаю, что fccc91f867cc071737bea5433d1c3181 Значение почему-то не распознается как действительное, когда база данных переносится на новый хост.

Чтобы обойти эту проблему, я написал PHP-скрипт для чтения базы данных, а затем перезагрузил загружаемые файлы с помощью REST API WooCommerce через Герхарда Потгитера. WooCommerce REST API PHP клиент.

<?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();
0

Другие решения

У меня такая же проблема.
Исправлено с помощью вашего ответа & использование update_post_meta () вместо REST API WooCommerce

$sql = "SELECT post_id,meta_value FROM 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"];

$v = explode("\"", $meta_value);

$results = array_filter($v, function($value) {
return strpos($value, 'https') !== false;
});

$file_path =  array_pop($results);

preg_match("/.+\:\"(https:\/\/.+\/wp-content\/uploads\/.+\/.+\/(.+)\..+)\".+/", $meta_value, $mn);

$file_name = $mn[2];
$md5_num =  md5( $m );

$abe_file = array();
$abe_file[0][$md5_num] = array(
'name'   =>  $file_name,
'file'   =>  $file_path
);

if(update_post_meta( $product_id, '_downloadable_files', $abe_file[0] ))
{
echo "$product_id . yay <br/>";
}
else{echo "waz <br/>";}}} else {
echo "0 results";
}
$conn->close();
0

По вопросам рекламы [email protected]