在WP插件中返回而不是echo

问题描述 投票:1回答:2

这可能是一个愚蠢的问题,但是我是编码的新手,所以这里是:-)。我正在尝试为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' );
php wordpress
2个回答
2
投票

您想将输出分配给变量,而不是回显:

$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变量。


0
投票

首先阅读有关简码输出的更多信息:https://codex.wordpress.org/Shortcode_API#Output

我现在可以想到两种方式。

使用ob_start ...基本上,您需要将代码包装在ob_start()

function create_startlist() {
    ob_start();
     /* CODE HERE */
    return ob_get_clean();
}

第二个使用concatenation operator

function create_startlist() {
    $output = '';
    $output .= 'OUTPUT HERE';
    return $output;
}
© www.soinside.com 2019 - 2024. All rights reserved.