> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# WordPress 故障排除

> 在 WordPress 上排查 OneSignal Web Push 通知常见设置问题的综合指南，包括浏览器兼容性（Chrome、Firefox、Safari）、插件集成以及解决 CDN 或缓存冲突。

## 常见设置问题

### 验证您的 OneSignal 仪表板设置

确保您已完成 [WordPress 设置指南](./wordpress) 中的每个步骤：

* 在创建 OneSignal 应用时选择 **WordPress 插件** 选项
* 您的站点 URL 必须与浏览器 URL 完全匹配
  * 例如，`https://example.com` 与 `https://www.example.com` **不**相同。请始终使用一个版本。
  * 推送仅支持一个站点源。请参阅[同源策略](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)。
* 确保您至少添加了一个权限提示。

### 不要手动添加 OneSignal 代码

OneSignal WordPress 插件**自动**包含初始化脚本和 Service Worker。

* 请**不要**在您的网站中添加 OneSignal JavaScript `init` 代码。
* 请**不要**将[自定义代码设置](./web-push-custom-code-setup)与 WordPress 插件一起使用。如果您需要自定义 `init` 方法，请**卸载插件**并手动添加代码和 Service Worker。

### 发布文章时发送通知

当您发布文章、页面或自定义文章类型时，OneSignal 可以自动向您的订阅者发送通知。

<Frame caption="OneSignal Push Notifications 元框——如需调整位置可拖动">
  <img src="https://mintcdn.com/onesignal/kAXbp86YqdTAbPtE/images/web-push/onesignal-push-notifications-metabox-wordpress.png?fit=max&auto=format&n=kAXbp86YqdTAbPtE&q=85&s=428a477e16f85fa50f9ff69678304340" alt="OneSignal Push Notifications 元框——如需调整位置可拖动" width="3252" height="1674" data-path="images/web-push/onesignal-push-notifications-metabox-wordpress.png" />
</Frame>

如果您看不到**发布或更新文章时发送通知**复选框，请检查以下内容：

1. 检查编辑器右侧和底部的元框，可按需拖放。
2. 检查编辑器顶部的**屏幕选项**，确保已勾选 **OneSignal Push Notifications** 元框。

<Frame caption="屏幕选项显示已勾选 OneSignal Push Notifications 元框">
  <img src="https://mintcdn.com/onesignal/kAXbp86YqdTAbPtE/images/web-push/wordpress-screen-options-onesignal-push-notifications-metabox-checked.png?fit=max&auto=format&n=kAXbp86YqdTAbPtE&q=85&s=fd11371fd17a5d66fec241bcc2ff5084" alt="屏幕选项显示已勾选 OneSignal Push Notifications 元框" width="1896" height="330" data-path="images/web-push/wordpress-screen-options-onesignal-push-notifications-metabox-checked.png" />
</Frame>

3. 检查是否使用了自定义文章类型。通常可在 URL 中找到，格式为 `post_type=your_custom_type`。如果是，请将自定义文章类型添加到 [OneSignal WordPress 插件设置](./wordpress#add-a-custom-post-type-to-onesignal-wordpress-plugin)中的**自定义文章类型**字段。

<Frame caption="查找自定义文章类型名称的示例位置">
  <img src="https://mintcdn.com/onesignal/kAXbp86YqdTAbPtE/images/web-push/wordpress-find-custom-post-types-field.png?fit=max&auto=format&n=kAXbp86YqdTAbPtE&q=85&s=3239d37ca790551c1fd3685f8424f319" alt="OneSignal WordPress 插件设置中显示自定义文章类型字段" width="1154" height="894" data-path="images/web-push/wordpress-find-custom-post-types-field.png" />
</Frame>

***

## 如何排查您的网站问题

<Steps>
  <Step title="验证插件已激活并打开开发者工具">
    在启用插件的正常（非隐身）浏览器窗口中加载您的网站。

    <Frame caption="右键单击您的网站，点击检查，然后打开控制台标签。">
      <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/28c27ab14a40621fbcc2c4168d49a2bf72088536a669be59c160b7a30a7fcd95-Screenshot_2025-02-27_at_10.39.27_AM.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=38d793be0784bcfd8acee745e3757dcf" alt="浏览器开发者工具在 WordPress 站点上打开并选中控制台标签" width="1814" height="1024" data-path="images/docs/28c27ab14a40621fbcc2c4168d49a2bf72088536a669be59c160b7a30a7fcd95-Screenshot_2025-02-27_at_10.39.27_AM.png" />
    </Frame>
  </Step>

  <Step title="检查控制台中的 OneSignal 错误">
    打开**控制台**标签，刷新页面，并查找任何与 OneSignal 相关的红色或黄色错误。
    有关帮助，请参阅[常见的 OneSignal 控制台错误](#common-onesignal-console-errors)。
  </Step>

  <Step title="在浏览器中检查订阅状态">
    页面加载完成且控制台中没有 OneSignal 错误后，粘贴以下内容：

    ```javascript JavaScript theme={null}
    OneSignal.User.PushSubscription.id
    ```

    如果访问者已订阅，这将返回一个字符串（订阅 ID）。如果未订阅或订阅尚未就绪，您可能会看到 **`null`** 或空值。如果您看到 **`OneSignal is not defined`**，请等待几秒后再试，或先修复[常见 OneSignal 控制台错误](#common-onesignal-console-errors)中的控制台错误——SDK 可能仍在通过延迟加载器加载。

    <Frame caption="在控制台中查找您的 OneSignal 订阅 ID。">
      <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/96cdeebdc8888b5c49b6466bf6975a75fb9497f7e54d34f7da3d6c25b35250ae-Screenshot_2025-02-27_at_11.15.16_AM.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=f396b737c9cd56257c59d6515086aec6" alt="浏览器控制台显示 OneSignal 用户 PushSubscription id 字符串结果" width="1258" height="448" data-path="images/docs/96cdeebdc8888b5c49b6466bf6975a75fb9497f7e54d34f7da3d6c25b35250ae-Screenshot_2025-02-27_at_11.15.16_AM.png" />
    </Frame>
  </Step>

  <Step title="在 OneSignal 仪表板中验证订阅 ID">
    在 **OneSignal 仪表板**中，转到 **Audience > Subscriptions** 并搜索上面返回的 ID。

    <Frame caption="在您的 OneSignal 仪表板中搜索订阅 ID。">
      <img src="https://mintcdn.com/onesignal/Z6xkXGfmy814If53/images/docs/e3907be9912e3ed3a934c6968f2e6f9354af519b8c670d1f7de07f32e71a8a80-Screenshot_2025-02-27_at_11.18.06_AM.png?fit=max&auto=format&n=Z6xkXGfmy814If53&q=85&s=76657b84cf0f8f29fa03a776f26cf66c" alt="OneSignal 仪表板订阅搜索字段显示订阅 ID 查询" width="2726" height="780" data-path="images/docs/e3907be9912e3ed3a934c6968f2e6f9354af519b8c670d1f7de07f32e71a8a80-Screenshot_2025-02-27_at_11.18.06_AM.png" />
    </Frame>
  </Step>

  <Step title="发送测试推送通知">
    如果订阅存在且状态为**已订阅**，请按照[推送指南](./push)发送通知。
    如果什么都没有显示，请参阅[未显示通知](./notifications-not-shown-web-push)获取特定于浏览器的修复方法。
  </Step>
</Steps>

***

## 常见的 OneSignal 控制台错误

### <Danger>SdkInitError: OneSignal: 此网络推送配置只能在...上使用。您当前的源是...</Danger>

<Frame caption="站点 URL 不匹配错误。">
  <img src="https://mintcdn.com/onesignal/_KaXe4GQkxsEfa17/images/docs/334686c64af6155f95d674d0cfd28a5b92739f3cae57382073365ec9206b7e7c-Screenshot_2025-02-27_at_11.35.59_AM.png?fit=max&auto=format&n=_KaXe4GQkxsEfa17&q=85&s=2d8d0656875180f0b77dd88795a4bced" alt="控制台 SdkInitError 显示网络推送配置源不匹配" width="2090" height="192" data-path="images/docs/334686c64af6155f95d674d0cfd28a5b92739f3cae57382073365ec9206b7e7c-Screenshot_2025-02-27_at_11.35.59_AM.png" />
</Frame>

您在 OneSignal 仪表板中的站点 URL 与您的实际域名不匹配。
确保它与您在浏览器中看到的域名完全匹配。

### <Danger>PushPermissionNotGrantedError: 用户关闭了权限提示。</Danger>

访问者拒绝了浏览器提示。在冷却期过期之前，它不会再次出现。
请参阅[Web 权限提示](./permission-requests)了解浏览器规则，或清除站点数据以立即重试。

### <Danger>OneSignal 网络 SDK 只能初始化一次。</Danger>

<Frame caption="重复 OneSignal 初始化错误。">
  <img src="https://mintcdn.com/onesignal/Xl2NHJvxakrK4JbL/images/docs/e88d53c6c92a546f188c06e14e1776da8ad63c658c64044b6a674802ce2a2277-Screenshot_2025-02-27_at_2.40.32_PM.png?fit=max&auto=format&n=Xl2NHJvxakrK4JbL&q=85&s=cc2d3a0773b894f423f0d6db598a37a1" alt="控制台错误：OneSignal 网络 SDK 只能初始化一次" width="2164" height="182" data-path="images/docs/e88d53c6c92a546f188c06e14e1776da8ad63c658c64044b6a674802ce2a2277-Screenshot_2025-02-27_at_2.40.32_PM.png" />
</Frame>

您加载了两次 OneSignal。如果您使用插件，请移除手动添加的 OneSignal 代码。

### <Danger>安装 Service Worker 失败.. 403 或 404 错误</Danger>

<Frame caption="Service Worker 文件缺失 (403/404)。">
  <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/990e505-Screen_Shot_2020-02-01_at_9.31.44_PM.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=0d719e6b826477612901d07e1d505f15" alt="控制台错误：安装 Service Worker 失败，403 或 404 错误" width="3364" height="200" data-path="images/docs/990e505-Screen_Shot_2020-02-01_at_9.31.44_PM.png" />
</Frame>

确保此文件可访问（将 `your-site.com` 替换为您的实际域名，并匹配您的**实际插件文件夹名称**，如果与默认名称不同）：
`https://your-site.com/wp-content/plugins/onesignal-free-web-push-notifications/sdk_files/OneSignalSDKWorker.js`

如果不能访问，请参阅[常见插件支持](#common-plugin-support)修复 CDN 或缓存问题。

***

## 常见插件支持

CDN 和缓存插件可能会阻止 OneSignal 所需的文件。以下路径假设插件目录为 **`onesignal-free-web-push-notifications`**；如果您的安装使用了不同的文件夹名称，请相应调整。

### Autoptimize

在**排除脚本**中添加：

```
wp-content/plugins/onesignal-free-web-push-notifications/sdk_files/(.*)
```

### WP Rocket

在 **CDN > 从 CDN 中排除文件**下添加：

```
(.*)/onesignal-free-web-push-notifications/sdk_files/(.*)
```

### LiteSpeed Cache

在 **CDN > 排除路径**下添加：

```
(.*)/onesignal-free-web-push-notifications/sdk_files/(.*)
```

然后按保存。

### WP Super Cache

1. 转到 **设置 > WP Super Cache > CDN**
2. 在 **如果包含子字符串则排除** 中，包含：`onesignal-free-web-push-notifications`
3. 点击 **内容** > **删除缓存**

### WP Engine

WP Engine 可能通过其 CDN 重写插件 URL。**HTML 后处理**规则是特定于环境的；以下代码段仅为**示例**——在应用之前请通过 [WP Engine 支持](https://wpengine.com/support/)或您的用户门户确认路径。

在 WP Engine **插件 > 常规设置 > HTML 后处理**中，您可能需要类似以下的规则。将每个占位符替换为**您的**站点和 WP Engine CDN 主机名中的实际值：

| 占位符                    | 替换为                                              |
| ---------------------- | ------------------------------------------------ |
| `YOURSITEHERE`         | 您的裸域名（正则表达式片段），例如 `example.com` 对应 `example`     |
| `mywpenginehandleHere` | 您的 WP Engine 安装名称（`.wpengine.com` 前的子域名）         |
| `wpengineCDNpathHere`  | WP Engine 提供的 NetDNA / CDN 路径片段（通常显示在 CDN URL 中） |
| `mywebsiteHere`        | 您的线上站点源，不含路径，例如 `https://example.com`            |

```text text theme={null}
#https?://(www\.)?(YOURSITEHERE\.com|mywpenginehandleHere.wpengine.com|wpengineCDNpathHere.wpengine.netdna-(ssl|cdn).com)/wp-(content|includes)#
=> https://wpengineCDNpathHere-wpengine.netdna-ssl.com/wp-$4
#https://wpengineCDNpathHere-wpengine.netdna-ssl.com/plugins/onesignal-free-web-push-notifications/#
=> https://mywebsiteHere.com/wp-content/plugins/onesignal-free-web-push-notifications/
#https://wpengineCDNpathHere-wpengine.netdna-ssl.com/wp-content/plugins/onesignal-free-web-push-notifications/#
=> https://mywebsiteHere.com/wp-content/plugins/onesignal-free-web-push-notifications/
```

### W3 Total Cache

1. 转到 **性能 > CDN**
2. 在 **被拒绝的文件**下添加：

```
{plugins_dir}/onesignal-free-web-push-notifications/sdk_files/*
```

<Frame caption="W3 Total Cache 排除设置。">
  <img src="https://mintcdn.com/onesignal/MUgio66t0sYhGEvj/images/docs/64ad121-Screen_Shot_2020-03-02_at_7.36.18_PM.png?fit=max&auto=format&n=MUgio66t0sYhGEvj&q=85&s=1b7d1eb06d32c8beef4026a70111dcdb" alt="W3 Total Cache CDN 已拒绝文件列表，包含 OneSignal sdk_files 路径" width="1071" height="494" data-path="images/docs/64ad121-Screen_Shot_2020-03-02_at_7.36.18_PM.png" />
</Frame>

### BunnyCDN

在插件的 CDN 排除路径中排除 *onesignal*。

<Frame caption="BunnyCDN 排除示例。">
  <img src="https://mintcdn.com/onesignal/ciRrThfP6xMpI7GY/images/docs/025f46c1159398106997c97a61ad26ffe4ecd6f7a068dcd6e3f743762e6e697b-Screenshot_2024-11-19_at_9.34.35_AM.png?fit=max&auto=format&n=ciRrThfP6xMpI7GY&q=85&s=d893359f9da931a9db313391a58cf1ca" alt="BunnyCDN WordPress 插件排除路径包含 onesignal" width="1830" height="518" data-path="images/docs/025f46c1159398106997c97a61ad26ffe4ecd6f7a068dcd6e3f743762e6e697b-Screenshot_2024-11-19_at_9.34.35_AM.png" />
</Frame>

### CDN Enabler

在设置 > CDN Enabler 中，在"排除"中添加：

```
onesignal-free-web-push-notifications
```

### PressCDN

在排除目录中添加：

```
/wp-content/plugins/onesignal-free-web-push-notifications/
```

### Breeze

在 **设置 > CDN > 排除内容**中添加：

```
/onesignal-free-web-push-notifications/sdk_files/
```

<Frame caption="Breeze 排除示例。">
  <img src="https://mintcdn.com/onesignal/Z6xkXGfmy814If53/images/docs/e0ea4ad-Screen_Shot_2020-06-30_at_7.59.26_PM.png?fit=max&auto=format&n=Z6xkXGfmy814If53&q=85&s=c12fed5c62e460beec878171e940928d" alt="Breeze CDN 排除内容字段包含 OneSignal sdk_files 路径" width="1219" height="552" data-path="images/docs/e0ea4ad-Screen_Shot_2020-06-30_at_7.59.26_PM.png" />
</Frame>

### Hummingbird Pro

转到 **Hummingbird > Asset Optimization**。在 **JavaScript**（以及 **CSS**，如果 OneSignal 资产出现在其中）下，找到 URL 中包含 **`onesignal-free-web-push-notifications`** 或 **`OneSignalSDK`** 的文件。将其从压缩/合并/延迟中**排除**，或将这些资产的优化方式切换为**不加载**，以防止插件重写或延迟它们。

<Frame caption="Hummingbird Pro 资产优化。">
  <img src="https://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/a888a91-PastedGraphic-4_3.png?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=e376446d64ec7fa8a8067ac7e8e551ba" alt="Hummingbird Pro 资产优化列表显示脚本排除项" width="476" height="90" data-path="images/docs/a888a91-PastedGraphic-4_3.png" />
</Frame>

### Sucuri

按照 [Sucuri 的白名单指南](https://kb.sucuri.net/firewall/Whitelist+and+Blacklist/whitelist-file-folder)允许 OneSignal 文件。

### Solid Security（原 iThemes Security）

在**系统调整**下禁用**在插件中禁用 PHP**（或同等选项），以便 `OneSignalSDKWorker.js.php` 可以正常运行。

<Frame caption="iThemes PHP 插件设置。">
  <img src="https://mintcdn.com/onesignal/KSCNwSpBCNSQ8xdF/images/docs/f78a21b-php-in-plugins.jpg?fit=max&auto=format&n=KSCNwSpBCNSQ8xdF&q=85&s=ee27f7a8662e6f8e2b001056b22aa904" alt="安全插件设置，显示允许插件中的 PHP 未勾选或已禁用" width="818" height="188" data-path="images/docs/f78a21b-php-in-plugins.jpg" />
</Frame>

### Defender Security plugin

不要启用"阻止 PHP 执行"。
转到 Defender 插件 > 安全调整并验证该设置已禁用。

### Service Worker 访问的 .htaccess 示例

```apache theme={null}
<Files *.php>
Order allow,deny
Deny from all
</Files>
<Files OneSignalSDKWorker.js.php>
Allow from all
ForceType 'application/javascript; charset=UTF-8'
</Files>
<Files OneSignalSDKWorker.js>
Allow from all
ForceType 'application/javascript; charset=UTF-8'
</Files>
```

<Note>
  Apache 2.4+ 通常使用 `Require all denied` / `Require all granted` 代替 `Order allow,deny`。请向您的主机咨询或根据服务器的 Apache 版本调整规则。
</Note>

***

## 发送通知后服务器速度放缓或网站无法访问

如果您的服务器在发送通知后遇到速度放缓或变得无法访问，这通常是由于通知资产的负载增加或服务器资源有限。

### 不要自行托管通知图标

避免自行托管通知中使用的图像。当您托管自己的通知图标或图像时，您的服务器可能会过载，因为每个接收者的浏览器都会在发送通知的同时尝试获取图像。
为了减少服务器压力，请使用为高并发访问优化的图像托管解决方案或 CDN 服务。

### 考虑升级托管资源

如果服务器问题持续存在，您可能需要：

* \*\*升级您的托管计划：\*\*更高的带宽或更强大的托管可能是处理大规模通知发送所必需的。
* \*\*咨询您的托管提供商：\*\*您的提供商可以提供针对您的托管环境的见解或优化。

***
