这可能是一个愚蠢的问题,但是我是编码的新手,所以这里是:-)。我正在尝试为WordPress创建一个简单的插件。该插件从MySQL数据库获取数据,并回显带有结果的表。我的问题是,当我使用echo时,即使我将简码放在页面中间,该插件也位于页面的第一位。我了解这是因为我使用echo而不是return。我只是不知道如何使用return。任何帮助将非常感激 :-)。这是我的代码:
$get_runners = $connection->prepare('SELECT first_name, last_name, nick_name, FROM database WHERE status = :status ORDER BY first_name ASC');
$get_runners->execute([status=>'success']);
// Create the table
echo '
<table id="Table" class="start-list-table">
<thead>
<tr class="start-list-tr">
<th scope="col">Name</th>
<th scope="col">Club</th>
</tr>
</thead>
<tbody>
';
// Get the runner object:
$runners = $get_runners->fetchAll();
foreach($runners as $runner){
if($runner->nick_name)
{
$runner_name = $runner->first_name.' "'.$runner->nick_name.'" '.$runner->last_name;
}
else
{
$runner_name = $runner->first_name.' '.$runner->last_name;
}
echo '
<tr class="start-list-tr">
<td data-label="Name">'.$runner_name.'</td>
<td data-label="Club">'.$runner->club.'</td>
</tr>';
}
echo '</tbody>
</table>';
}
add_shortcode( 'startlist', 'create_startlist' );
您想将输出分配给变量,而不是回显:
$get_runners = $connection->prepare('SELECT first_name, last_name, nick_name, FROM database WHERE status = :status ORDER BY first_name ASC');
$get_runners->execute([status=>'success']);
// Create the table
$output = '
<table id="Table" class="start-list-table">
<thead>
<tr class="start-list-tr">
<th scope="col">Name</th>
<th scope="col">Club</th>
</tr>
</thead>
<tbody>
';
// Get the runner object:
$runners = $get_runners->fetchAll();
foreach($runners as $runner){
if($runner->nick_name)
{
$runner_name = $runner->first_name.' "'.$runner->nick_name.'" '.$runner->last_name;
}
else
{
$runner_name = $runner->first_name.' '.$runner->last_name;
}
$output .= '
<tr class="start-list-tr">
<td data-label="Name">'.$runner_name.'</td>
<td data-label="Club">'.$runner->club.'</td>
</tr>';
}
$output .= '</tbody>
</table>';
return $output;
}
add_shortcode( 'startlist', 'create_startlist' );
这使用串联来继续通过函数填充变量。然后将return
设置为$output
变量。
首先阅读有关简码输出的更多信息:https://codex.wordpress.org/Shortcode_API#Output
我现在可以想到两种方式。
使用ob_start ...基本上,您需要将代码包装在ob_start()
中
function create_startlist() {
ob_start();
/* CODE HERE */
return ob_get_clean();
}
function create_startlist() {
$output = '';
$output .= 'OUTPUT HERE';
return $output;
}