Php 在WP插件中返回而不是回显
这可能是一个愚蠢的问题,但我对编码还不熟悉,所以这里是:-)。 我正在尝试为WordPress创建一个简单的插件。该插件从MySQL数据库获取数据,并将结果回传到一个表中。我的问题是,当我使用ECHO时,插件会首先放在页面上,即使我把短代码放在页面的中间。我明白这是因为我使用echo而不是return。我只是不知道如何在我的情况下使用return。任何帮助都将不胜感激:-)。 这是我的密码:Php 在WP插件中返回而不是回显,php,wordpress,Php,Wordpress,这可能是一个愚蠢的问题,但我对编码还不熟悉,所以这里是:-)。 我正在尝试为WordPress创建一个简单的插件。该插件从MySQL数据库获取数据,并将结果回传到一个表中。我的问题是,当我使用ECHO时,插件会首先放在页面上,即使我把短代码放在页面的中间。我明白这是因为我使用echo而不是return。我只是不知道如何在我的情况下使用return。任何帮助都将不胜感激:-)。 这是我的密码: $get_runners = $connection->prepare('SELECT f
$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']);
//创建表
回声'
名称
俱乐部
';
//获取runner对象:
$runners=$get_runners->fetchAll();
foreach($runner作为$runner){
如果($runner->nick\u name)
{
$runner\u name=$runner->first\u name.''.$runner->nick\u name.''.$runner->last\u name;
}
其他的
{
$runner\u name=$runner->first\u name.'.$runner->last\u name;
}
回声'
“.$runner_name”
“.$runner->club”
';
}
回声'
';
}
添加_快捷码('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' );
$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']);
//创建表
$output=
名称
俱乐部
';
//获取runner对象:
$runners=$get_runners->fetchAll();
foreach($runner作为$runner){
如果($runner->nick\u name)
{
$runner\u name=$runner->first\u name.''.$runner->nick\u name.''.$runner->last\u name;
}
其他的
{
$runner\u name=$runner->first\u name.'.$runner->last\u name;
}
$output.='
“.$runner_name”
“.$runner->club”
';
}
$output.='
';
返回$output;
}
添加_快捷码('startlist','create_startlist');
这将使用串联继续通过函数填充变量。然后将
return
设置为$output
变量。首先阅读有关快捷码输出的更多信息:
现在我可以想到两种方法
使用。。。基本上,您需要将代码包装到ob\u start()
第二是使用
阅读(我的重点):请注意,由短代码调用的函数不应产生任何类型的输出。短代码函数应返回用于替换短代码的文本。直接生成输出将导致意外的结果。这与过滤器函数的行为方式类似,因为它们不应该在调用时产生预期的副作用,因为您无法控制从何时何地调用它们。“有什么原因不返回输出字符串吗?非常感谢!非常有效。我刚刚将最后一个$output中的。(无法在编辑中编辑,因为它太短:-)。我编辑了它。我简直不敢相信我这么做了!我很高兴它对你有用!
function create_startlist() {
ob_start();
/* CODE HERE */
return ob_get_clean();
}
function create_startlist() {
$output = '';
$output .= 'OUTPUT HERE';
return $output;
}