我希望比我更了解PHP和WordPress的人能帮助我解决这个问题。我有一个自定义的帖子类型,其中显示的帖子使用以下代码:
<?php $args = array( \'post_type\' => \'upcoming_event\', \'posts_per_page\' => 3 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
echo \'<div class="upcomingevents">\';
echo \'<h4>\';
the_title();
echo \'</h4>\';
echo \'<div class="upcomingeventimage">\';
the_post_thumbnail(\'medium\');
echo \'</div>\';
echo \'<div class="upcoming-event-entry-content">\';
the_content();
echo \'</div>\';
echo \'</div>\';
endwhile;
wp_reset_postdata();
?>
虽然这在php文件中可以很好地工作,但我也尝试通过短代码轻松访问它。我制作了短代码,短代码也可以使用,但每次我将其放在页面/帖子上并单击“更新”或“发布”,它都会将我发送到一个打印有此内容的页面(并且只打印此内容)。。。但它仍然保存了它,并且在我保存它的页面上仍然显示良好。我知道我遗漏了一些东西,但我对PHP非常熟悉,不知道它是什么。
以下是我的短代码:
// Shortcode for Upcoming Events
function upcoming_events_shortcode() {
$args = array( \'post_type\' => \'upcoming_event\', \'posts_per_page\' => 3 );
$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();
echo \'<div class="upcomingevents">\';
echo \'<h4>\';
the_title();
echo \'</h4>\';
echo \'<div class="upcomingeventimage">\';
the_post_thumbnail(\'medium\');
echo \'</div>\';
echo \'<div class="upcoming-event-entry-content">\';
the_content();
echo \'</div>\';
echo \'</div>\';
endwhile;
wp_reset_postdata();
}
add_shortcode(\'upcoming-events\', \'upcoming_events_shortcode\');
谢谢你的帮助!我一边学习,一边做这个,通常我可以用谷歌搜索出大多数东西,但不是这一个。在上面抓我的头。
最合适的回答,由SO网友:felipelavinz 整理而成
短代码应该返回字符串,而不是回显数据。。。因此,这里有两个选项之一:
将“echo”内容的所有echo语句和所有函数更改为与return一起使用(将所有内容串联在一个字符串上,然后返回它)
使用输出缓冲,对于输出缓冲,您的代码将如下所示:function upcoming_events_shortcode() {
$args = array( \'post_type\' => \'upcoming_event\', \'posts_per_page\' => 3 );
$query = new WP_Query( $args );
ob_start();
while ( $query->have_posts() ) : $query->the_post();
echo \'<div class="upcomingevents">\';
echo \'<h4>\';
the_title();
echo \'</h4>\';
echo \'<div class="upcomingeventimage">\';
the_post_thumbnail(\'medium\');
echo \'</div>\';
echo \'<div class="upcoming-event-entry-content">\';
the_content();
echo \'</div>\';
echo \'</div>\';
endwhile;
wp_reset_postdata();
return ob_get_clean();
}
这样,所有echo\'ed内容都将被输出缓冲区捕获。
SO网友:Andy Macaulay-Brook
Shortcode函数需要返回字符串,而不是回显输出。
只需将所有echo语句更改为字符串串联,并使用返回而不是回显其结果的函数:
// Shortcode for Upcoming Events
function upcoming_events_shortcode() {
$args = array( \'post_type\' => \'upcoming_event\', \'posts_per_page\' => 3 );
$query = new WP_Query( $args );
while ( $query->have_posts() ) : $query->the_post();
$output = \'<div class="upcomingevents">\';
$output .= \'<h4>\';
$output .= get_the_title();
$output .= \'</h4>\';
$output .= \'<div class="upcomingeventimage">\';
$output .= get_the_post_thumbnail(\'medium\');
$output .= \'</div>\';
$output .= \'<div class="upcoming-event-entry-content">\';
$output .= get_the_content();
$output .= \'</div>\';
$output .= \'</div>\';
endwhile;
wp_reset_postdata();
return $output;
}
add_shortcode(\'upcoming-events\', \'upcoming_events_shortcode\');
警告:我已经添加了
get_
无需测试即可实现功能。检查WP文档,确保功能之间没有任何差异。
阅读关于短代码的开发人员文档,了解如何包含属性,以便您可以改变帖子的数量。