WordPress插件短码输出每次刷新页面重复显示的问题求助
WordPress插件短码输出每次刷新页面重复显示的问题求助
我正在开发一个简单的WordPress插件,功能是从外部API获取随机名言,然后通过短码展示出来。但现在遇到个头疼的问题:每次刷新页面,名言都会重复显示——同一个容器里会出现两次(甚至更多)名言。我本来预期每次页面加载只显示一条名言的。
以下是我简化后的插件代码:
function my_quotes_shortcode() { $response = wp_remote_get('https://api.quotable.io/random'); if (is_wp_error($response)) { return 'Quote unavailable.'; } $data = json_decode(wp_remote_retrieve_body($response)); $quote = $data->content ?? 'Default quote'; $author = $data->author ?? 'Unknown'; return "<div class='quote-box'>\"{$quote}\" - {$author}</div>"; } add_shortcode('daily_quote', 'my_quotes_shortcode');
我尝试过的解决方法
- 把返回内容用
ob_start()/ob_get_clean()包裹——没有任何变化 - 确保
add_shortcode()只调用一次,并且放在所有钩子外部 - 清除了浏览器缓存、站点缓存和服务器缓存
- 切换到默认的Twenty Twenty-Four主题——问题依然存在
预期效果
我预期每次页面加载时,短码都会返回一个包含单条名言的<div>容器,不会出现重复显示的情况。
补充说明
- 我没有引入任何自定义的JavaScript或CSS
- 是通过WordPress编辑器在基础页面块中使用这个短码的
- 快速刷新页面时,重复出现的概率更高
- 这会不会和WordPress处理短码渲染的方式有关?还是API请求的时序问题?求各位大佬帮忙解答!
更新:重复问题的原因是在某些Gutenberg区块场景下,短码会被多次执行。根据下面的回答提示,我在短码函数内部使用了静态变量,问题就解决了!感谢大家的帮助!
内容来源于stack exchange
相关产品推荐
相关产品推荐

