您正在尝试返回<?php
块为文本,您不需要这样做,但这样做是错误的-即使您正确返回它,它也不会被执行。您的特定语法错误是以下位:
function my_users_shortcode( $atts, $content) {
return \'<?php
if ( is_user_logged_in() ) {
echo \'<a href="\' . home_url()
你在哪里有
\'
从你正在划界的字符串中的回声
\'
从这里突出显示的语法可以看出,它认为字符串以
echo \'
而且
<a href
现在又是PHP代码了。如果你真的想这么做,你就需要逃离
\'
用反斜杠使其成为字符串的一部分,而不是字符串的末端,即。
return \'<?php echo \\\'a href="\\\' . home_url(); ?>\';
但您不必这样做:因为我们目前正在my\\u users\\u shortcode处理程序中运行PHP代码,所以您可以从那里回显链接,而不是尝试返回PHP代码片段,以便稍后尝试执行(这将不起作用),即。
function my_users_shortcode( $atts, $content ) {
if ( is_user_logged_in() ) {
echo \'<a href="\' . home_url() . \'/author/ \' .
get_the_author_meta( \'user_login\', wp_get_current_user()->ID ) .
\'"> My personal page</a>\';
} else {
echo \'<a href="\' . wp_login_url() . \'" title="Login">Login</a>\';
}
}
add_shortcode( \'my_shortcode\', \'my_users_shortcode\' );
也就是说,正如我在评论中所讨论的
get_author_posts_url
生成作者页面URL,而不是自己构建它,我认为您应该有一些
esc_url
s也是:
function my_users_shortcode( $atts, $content ) {
if ( is_user_logged_in() ) {
echo \'<a href="\' . esc_url( get_author_posts_url( wp_get_current_user()->ID ) ) .
\'">My personal page</a>\';
} else {
echo \'<a href="\' . esc_url( wp_login_url() ) . \'" title="Login">Login</a>\';
}
}
add_shortcode( \'my_shortcode\', \'my_users_shortcode\' );
(如果将来您希望文本可翻译,则需要将这些部分
__(\'\')
也是)