【发布时间】:2018-10-22 00:17:30
【问题描述】:
我的 Wordpress 查询有问题。
我想做什么:
我有包含产品数据(名称、价格、库存、sku 等)的 CSV 文件 我想导入这个文件,但是当我试图通过 SKU 获取产品 ID 时,我的查询对于我的服务器来说太高了,但我做了一些愚蠢的想法:在 foreach 中我试图获取所有 product_id。
是否可以在不终止服务器的情况下拆分我的 wp 查询? 我正在尝试睡觉,但这没有结果...
我的代码在这里:
public function new_import_stock_prices(){
global $wpdb;
global $post;
if ( !function_exists( 'wc_get_product_id_by_sku' ) ) {
require_once '/includes/wc-product-functions.php';
}
echo '<h1>Import stanów magazynowych i cen z pliku CSV </h1>';
echo '<h4>Plik pobierany jest z netis/products.csv</h4>';
$fn = 'https://e-xxxxx.pl/xxx/products.csv';
$file_array = file($fn);
echo '<table>';
echo '<tr>';
echo '<td>LP</td>';
echo '<td>Nazwa</td>';
echo '<td>SKU</td>';
echo '<td>Stan magazynowy</td>';
echo '<td>Cena</td>';
echo '<td>Product ID</td>';
$i = 1;
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
foreach ($file_array as $line_number =>&$line)
{
if ($line_number > 0 && $line_number % 10 == 0) {
$row2=explode('|',$line);
$sku = $row2[1];
// get the product ID from the SKU
$product_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $sku ) );
// Get an instance of the WC_Product object
$product = new WC_Product( $product_id );
//Get product stock quantity and stock status
$stock_quantity = $product->get_stock_quantity();
$stock_status = $product->get_stock_status();
echo '<tr>';
echo '<td>'.$i.'</td>';
echo '<td>'.$row2[0].'</td>';
echo '<td>'.$row2[1].'</td>';
echo '<td>'.$row2[5].'</td>';
echo '<td>'.$row2[2].'</td>';
echo '<td>'.$product_id.'</td>';
echo '</tr>';
$i = $i +1;
sleep(10);
}
}
}
echo '</table>';
}
顺便说一句。我的 wp_postmeta 表有 ~900 000+ 条记录:O
【问题讨论】:
-
I'm trying sleep but this is no result...这与您想要做的相反。 3(ish)事情会在这里伤害你memory_limit和time_limit以及浏览器的缓冲区。您可以稍微更改它们,但它们的修复效果很差。 -
And I want to import this file,我看不到您将其保存在哪里(除非我在某处错过了WC_Product::save()),我看到您正在输出它。那么是输出还是保存呢。 -
内存限制为10240m,时间限制为1000
-
因此,您尝试一次读取整个文件,此外您的服务器内存与浏览器的客户端内存无关。
-
@ArtisticPhoenix 首先我想显示所有产品 id,以检查它是否正确。下一步是更改库存、价格和保存产品。这是我的第一个插件 :)
标签: php mysql wordpress woocommerce