如何在WordPress的BuddyPress用户资料页添加邮件当前页面PHP按钮
解决BuddyPress用户资料页“邮件当前页面”按钮的URL问题
我来帮你搞定这个邮件按钮的问题!你的代码没成功把当前页面URL放进邮件正文,主要是两个小问题:一是单引号包裹的字符串里PHP变量不会被解析,二是你没正确获取BuddyPress用户资料页的专属URL。
下面是修正后的代码,我会一步步给你解释:
function my_custom_button() { // 用BuddyPress内置函数获取当前用户资料页的完整URL $current_profile_url = bp_displayed_user_domain(); // 对URL进行编码,避免邮件链接里的特殊字符导致格式错误 $encoded_url = urlencode($current_profile_url); // 输出按钮HTML,通过字符串拼接确保变量被正确替换 echo '<br/><div class="mcb"><a href="mailto:?subject=Check out this profile&body=' . $encoded_url . '" title="Email this profile">EMAIL THIS PROFILE</a></div>'; } add_filter( 'bp_before_member_header_meta', 'my_custom_button' );
关键修改点说明:
bp_displayed_user_domain():这是BuddyPress专门为用户资料页设计的函数,能精准返回当前浏览的用户资料页完整URL,比通用的get_permalink()更适配BuddyPress的页面结构,不会出错。urlencode():把URL里的特殊字符(比如&、/)转成邮件系统能正确识别的编码,防止URL被截断或者显示乱码。- 字符串拼接替代单引号变量:原代码里的
$currentpage写在单引号里,PHP不会把它当成变量解析,改成字符串拼接后,变量值才会被正确插入到邮件链接里。
如果你想在邮件正文里添加更多说明文字,比如引导语,可以这样调整:
function my_custom_button() { $current_profile_url = bp_displayed_user_domain(); // 组合正文内容并编码 $email_body = urlencode('Check out this interesting user profile: ' . $current_profile_url); echo '<br/><div class="mcb"><a href="mailto:?subject=Check out this profile&body=' . $email_body . '" title="Email this profile">EMAIL THIS PROFILE</a></div>'; } add_filter( 'bp_before_member_header_meta', 'my_custom_button' );
把这段代码替换你原来的函数,刷新用户资料页就能看到能正常传递URL的邮件按钮啦!
内容的提问来源于stack exchange,提问作者Alec Cohen
相关产品推荐
相关产品推荐

