在WordPress WooCommerce中创建SKU库存列表PHP页面遇404问题求助
解决WordPress自定义PHP文件404错误及SKU/库存导出优化
一、404错误排查与解决步骤
1. 验证文件位置与命名
- 检查
public_html根目录下是否存在stock.php,避免上传到子目录(如wp-content)或文件名拼写错误(Linux服务器区分大小写,Stock.php与stock.php会被识别为不同文件) - 通过主机控制面板的文件管理器直接确认,确保文件与
wp-load.php处于同一层级目录
2. 修改.htaccess重写规则
WordPress默认重写规则会拦截非原生URL,需在规则前添加允许访问stock.php的指令:
打开根目录下的.htaccess文件,将以下代码添加到WordPress默认规则之前:
# 允许直接访问stock.php RewriteRule ^stock.php$ - [L] # 以下为WordPress默认规则(保留原有内容即可) RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
保存后设置.htaccess权限为644,避免权限问题导致规则不生效
3. 刷新固定链接规则
进入WP后台 → 设置 → 固定链接,选择任意非默认选项(如「文章名」),点击「保存更改」,强制刷新重写规则缓存
二、代码优化(解决潜在问题并提升性能)
原代码存在路径依赖、性能冗余等问题,优化后的代码如下:
<?php // 使用绝对路径加载WordPress环境,避免路径解析错误 require_once(__DIR__ . '/wp-load.php'); // 设置输出为纯文本,确保格式纯净无冗余内容 header('Content-Type: text/plain; charset=utf-8'); // 仅查询已发布商品的ID,减少数据库查询负载 $args = array( 'post_type' => 'product', 'posts_per_page' => -1, 'post_status' => 'publish', 'fields' => 'ids', ); $product_ids = get_posts($args); // 遍历输出SKU与库存 if (!empty($product_ids)) { foreach ($product_ids as $id) { $product = wc_get_product($id); if (!$product) continue; $sku = $product->get_sku(); $stock_quantity = $product->get_stock_quantity(); if (!empty($sku) && isset($stock_quantity)) { echo $sku . ';' . $stock_quantity . "\n"; } } } else { echo 'No products found'; } ?>
优化点说明:
- 用
__DIR__获取当前文件目录,确保wp-load.php路径绝对正确 - 添加
Content-Type头,强制输出纯文本,避免混入WP默认HTML内容 - 仅查询商品ID而非完整文章数据,大幅降低数据库查询压力
- 增加
post_status筛选,只处理已发布商品 - 增加
$product有效性判断,避免无效商品导致的报错
内容的提问来源于stack exchange,提问作者Alfredo Saez
相关产品推荐
相关产品推荐

