Как правильно отображать результаты в БД в шорткоде? - PullRequest
0 голосов
/ 21 июня 2019

Я знаю, что не должен ничего отображать в функции шорткода, но я не понимаю, как это сделать правильно.Я вижу людей, которые задают этот вопрос, но никто, кажется, не знает ответа.

// 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 выдает ошибку, но с какими шагами можно вывести результаты базы данных?правильно, хотя это работает.

1 Ответ

1 голос
/ 21 июня 2019

Действительно, вам нужно вернуть вывод вместо отображения его. Для этого вы можете хранить все в переменной и возвращать только это:

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