用短代码显示数据库结果的正确方法是什么?

时间:2019-06-20 22:07:17

标签: php wordpress

我知道我不应该在简码函数中回显任何内容,但是我不了解执行此操作的正确方法。我看到有人问这个问题,但似乎没人知道答案。

// 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 个答案:

答案 0 :(得分:1)

实际上,您需要返回输出,而不是显示。为此,您可以将所有内容存储在变量中并返回:

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