Возврат вместо эха в плагине WP - PullRequest
1 голос
/ 02 февраля 2020

Это, вероятно, глупый вопрос, но я новичок в кодировании, так что здесь идет :-). Я пытаюсь создать простой плагин для WordPress. Плагин получает данные из базы данных MySQL и выводит таблицу с результатами. Моя проблема в том, что когда я использую echo, плагин размещается первым на странице, даже если я поставил шорткод в середине страницы. Я понимаю, что это потому, что я использую эхо вместо возврата. Я просто не понимаю, как использовать возврат в моем случае. Любая помощь приветствуется :-). Вот мой код:

    $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' );

Ответы [ 2 ]

2 голосов
/ 03 февраля 2020

Вы хотите присвоить свой вывод переменной, а не повторять:

$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 голосов
/ 03 февраля 2020

Сначала прочитайте больше о выводе шорткодов: 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...