WordPress单文章图片加Pinterest分享按钮报错求助
解决WordPress单文章页图片前添加Pinterest按钮的Notice错误
这两个错误其实都是因为代码里依赖的$post变量没被正确初始化或者不存在导致的,咱们一步步来修复:
1. 先搞懂错误原因
Notice: Undefined variable: post:说明你的代码里直接用了$post变量,但这个变量根本没被定义(比如在全局上下文外、非文章循环里,或者单文章页以外的页面执行了这段代码)Notice: Trying to get property of non-object:当$post不是一个有效的WP文章对象时,你又去访问它的属性(比如$post->ID),自然就报错了
2. 具体修复步骤
步骤一:确保$post变量可用
如果你的代码是写在functions.php的自定义函数里,首先要把$post全局化,或者主动获取当前文章对象:
// 全局化$post变量 global $post; // 保险起见,再判断$post是否是有效的WP文章对象 if ( !$post instanceof WP_Post ) { // 如果全局$post不存在,尝试获取当前文章 $post = get_post(); // 还是获取不到的话,直接终止代码,避免报错 if ( !$post ) return; }
步骤二:限制代码只在单文章页执行
既然你只需要在单文章页添加按钮,那就用WordPress的is_single()函数做判断,避免代码在首页、列表页等非单文章场景执行:
if ( !is_single() ) { return; // 不是单文章页,直接退出 }
步骤三:修复报错的prepend代码
假设你原来的报错代码是在PHP里输出jQuery逻辑,比如直接拼接了$post->ID,那修改成这样:
function add_pinterest_button_to_images() { // 先判断是否是单文章页 if ( !is_single() ) return; global $post; // 确保$post是有效对象 if ( !$post instanceof WP_Post ) return; // 获取文章链接 $post_url = esc_url( get_permalink($post->ID) ); // 输出jQuery代码,注意转义变量避免XSS ?> <script> jQuery(document).ready(function($) { // 给单文章页的图片前添加Pinterest按钮 $("img").each(function() { // 获取当前图片的URL,用它作为分享的媒体源 var imgUrl = $(this).attr("src"); $(this).prepend(`<a href="https://pinterest.com/pin/create/button/?url=<?php echo $post_url; ?>&media=${imgUrl}" class="pin-it-button" count-layout="horizontal"><img src="//assets.pinterest.com/images/pidgets/pinit_fg_en_rect_gray_20.png" /></a>`); }); }); </script> <?php } // 把代码挂在wp_footer钩子,确保DOM加载完成后执行 add_action('wp_footer', 'add_pinterest_button_to_images');
额外提醒:安全与兼容性
- 用
esc_url()转义所有输出的URL,避免XSS安全漏洞 - 上面的代码用了当前图片的URL作为分享媒体源,比固定用文章封面更贴合需求
- 不要直接在全局上下文写代码,尽量封装成函数挂在合适的钩子上(比如
wp_footer)
这样修改后,两个Notice错误应该就会消失,同时Pinterest按钮的功能也能正常运行啦。
内容的提问来源于stack exchange,提问作者evavienna
相关产品推荐
相关产品推荐

