我知道我不应该在简码函数中回显任何内容,但是我不了解执行此操作的正确方法。我看到有人问这个问题,但似乎没人知道答案。
// my shortcode function
function simpledir_shortcode_list() {
// get list of items in directory
global $wpdb;
$result = $wpdb->get_results('SELECT * FROM wp_simpledir LIMIT 10');
?>
<?php
$count = 1;
foreach ( $result as $listing )
{
if ($count % 2 == 0) { ?>
<div class="alternate" valign="top">
<?php }else{ ?>
<div valign="top">
<?php
}
?>
<div class="listing-item">
<p><?= $listing->name; ?></p>
</div>
<?php
$count++;
}
?>
</div>
<?php }
add_shortcode('simpledir_shortcode_list','simpledir_shortcode_list');
?>
如果我在任何页面上都使用了[simpledir_shortcode_list],Wordpress会给出一个错误,但是即使可以正常工作,但可以正确输出数据库结果的步骤是什么。
答案 0 :(得分:1)
实际上,您需要返回输出,而不是显示。为此,您可以将所有内容存储在变量中并返回:
// my shortcode function
function simpledir_shortcode_list() {
// get list of items in directory
global $wpdb;
$output = '';
$result = $wpdb->get_results('SELECT * FROM wp_simpledir LIMIT 10');
$count = 1;
foreach ( $result as $listing )
{
if ($count % 2 == 0) {
$output .= '<div class="alternate" valign="top">';
} else {
$output .= '<div valign="top">';
}
$output .= '<div class="listing-item"><p>' . $listing->name . '</p></div>';
$count++;
}
$output .= '</div>';
return $output;
}
add_shortcode('simpledir_shortcode_list', 'simpledir_shortcode_list');
顺便说一句,似乎您的</div>
结束标记应该位于foreach
循环之内而不是像现在那样位于外部:
// my shortcode function
function simpledir_shortcode_list() {
// get list of items in directory
global $wpdb;
$output = '';
$result = $wpdb->get_results('SELECT * FROM wp_simpledir LIMIT 10');
$count = 1;
foreach ( $result as $listing )
{
if ($count % 2 == 0) {
$output .= '<div class="alternate" valign="top">';
} else {
$output .= '<div valign="top">';
}
$output .= '<div class="listing-item"><p>' . $listing->name . '</p></div>';
$output .= '</div>';
$count++;
}
return $output;
}
add_shortcode('simpledir_shortcode_list', 'simpledir_shortcode_list');