首页 > 解决方案 > 在简码中显示 db 结果的正确方法是什么?

问题描述

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

// 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 会给出错误,但是即使这样可以正确输出数据库结果的步骤是什么。

标签: phpwordpress

解决方案


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

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

推荐阅读