快捷代码结果显示在页面内容上方

时间:2020-07-07 作者:Israel Santiago

您好,我遇到了一些短代码问题,因为它的结果出现在页面内容上方,而它应该出现在短代码所在的位置。这是短代码。。。

<?php
if (!defined(\'ABSPATH\')) exit;

/* creacion del shortcode [cotizador id=""] */

function cotizador_shortcode($atts)
{
    /* le pasamos los argumentos al shortcode dentro de un array */
    $args = array(
        \'post_type\' => \'vehiculos\', /* se toma de post_type.php */
        \'id\' => $atts[\'id\']
        // \'familia\' => $atts[\'familia\']
    );
    $cotizador = new WP_Query($args); /* sirve para imprimir el post_type en el shortcode */
    
    $single_car_query = cotizador_car_query($args[\'id\']);
    // $title_query = cotizador_query_select($single_car_query[\'post_id\']);
    $precio = $single_car_query[\'car_price\'];
    $enganche = $single_car_query[\'car_price\'] * 0.10;
    // echo "<pre>";
    //    var_dump($enganche);
    // echo "</pre>";
    
?>

<!-- THE CODE BELOW SHOULD APPEAR IN THE PAGE CONTENT AS A TABLE -->

    <form name="cotizador_enviar" id="cotizador_enviar">
        <div id="cotizador" class="cotizador">
            <table class="table table-hover">
                <thead>
                    <tr>
                        <th scope="col">Modelo</th>
                        <th scope="col">Precio</th>
                        <th scope="col">Enganche</th>
                        <th scope="col">Bono</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Otto</td>
                        <td><?php echo esc_attr("$". $precio); ?></td>
                        <td><?php echo esc_attr("$". $enganche); ?></td>
                        <td>No</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </form>

<?php
}
add_shortcode(\'cotizador\', \'cotizador_shortcode\');

如您所见,结果是HTML,但当我在页面内容中放置短代码时,它看起来是这样的:Shortcode error

当结果显示在图片下方时,您可以在wp admin中看到:wp-admin shortcode placed

我知道如果我们使用;“回声”;这种情况会发生,可以使用;return“返回”;但这只适用于变量(我猜),但在我的情况下,结果不是变量,所以我很困惑

谢谢!!

1 个回复
最合适的回答,由SO网友:Ivan Shatsky 整理而成

您应该使用output control functions 如果您想这样做:

function cotizador_shortcode($atts)
{
    ... your code here ...
    ob_start();
?>

<!-- THE CODE BELOW SHOULD APPEAR IN THE PAGE CONTENT AS A TABLE -->

... HTML here ...

<?php
    $output = ob_get_contents();
    ob_end_clean();
    return $output;
}
add_shortcode(\'cotizador\', \'cotizador_shortcode\');

相关推荐

What does this shortcode do?

function my_shortcode($atts, $content = null){ extract(shortcode_atts(array(\"type\" => \"warrning\"), $atts)); return \".$content.\"; } add_shortcode(\"warrning_dialog\", \"my_shortcode\"); 我知道它会创建短代码[warning\\u dialo