仅在指定分类发布WordPress帖子时推送通知失败求助
修复WordPress指定分类帖子推送通知的问题
看了你的代码,问题出在几个关键细节上,我帮你一步步梳理并修正:
原代码的核心问题
get_cat_ID()调用错误:这个函数必须传入分类名称作为参数,比如get_cat_ID('Result'),你现在空参数调用会返回0,永远无法匹配条件。- 类型不匹配的比较:
get_cat_ID()返回的是整数类型的分类ID,但你却和字符串'Result'做比较,整数和字符串永远不相等,导致条件永远不成立。 - 判断逻辑偏差:你当前的逻辑是“获取某个分类ID,再判断这个ID是否等于字符串'Result'”,这完全不符合需求——正确逻辑应该是检查当前发布的帖子是否属于'Result'分类。
echo使用不当:在WordPress钩子函数里直接用echo会打乱页面输出流程,建议用error_log()来记录调试信息。
修正后的代码
/* 处理新增帖子时的通知逻辑 */ function fcm_main_transition_post_new($new_status, $old_status, $post){ // 只处理「从非发布状态变为发布状态」的帖子,避免草稿、定时发布等场景误触发 if ($new_status !== 'publish' || $old_status === 'publish') { return; } // 获取目标分类「Result」的ID(返回整数) $target_cat_id = get_cat_ID('Result'); if (!$target_cat_id) { error_log('推送通知失败:未找到名为"Result"的分类'); return; } // 获取当前帖子所属的所有分类ID $post_categories = wp_get_post_categories($post->ID); // 检查帖子是否属于目标分类 if (in_array($target_cat_id, $post_categories)) { // 调用推送通知函数 fcm_notif_post_new($new_status, $old_status, $post); } else { error_log('该分类未设置推送通知:帖子所属分类不包含"Result"'); } } // 记得挂接transition_post_status钩子(如果之前没挂的话) add_action('transition_post_status', 'fcm_main_transition_post_new', 10, 3);
关键修改说明
- 增加状态校验:确保只在帖子正式发布时触发,避免重复推送或不必要的执行。
- 正确获取目标分类ID:给
get_cat_ID()传入分类名称'Result',拿到正确的整数ID。 - 校验帖子所属分类:用
wp_get_post_categories()获取当前帖子的所有分类ID,再用in_array()判断是否包含目标分类。 - 替换echo为error_log:把调试信息写入WordPress错误日志(需开启
WP_DEBUG,日志文件在wp-content/debug.log),避免破坏页面输出。
这样修改后,当你发布属于「Result」分类的帖子时,就能正常触发推送通知了。
内容的提问来源于stack exchange,提问作者Balraj
相关产品推荐
相关产品推荐

