php – Uso adecuado del búfer de salida

Pregunta:

Estoy intentando usar acciones para anular las llamadas a funciones que tengo actualmente en una plantilla (para facilitar la actualización de ciertas secciones replicadas). Por ejemplo, en archives.php tengo lo siguiente:

<?php get_header(); ?>

    <?php roots_content_before(); ?>
    <?php $page_for_posts = get_option( 'page_for_posts' ); if ($page_for_posts) { echo '<h1>' . get_the_title($page_for_posts) . '</h1>'; } ?>
    <h3>
        <?php
            $term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
            if ($term) {
                echo $term->name;
            } elseif (is_day()) {
                printf(__('Daily Archives: %s', 'roots'), get_the_date());
            } elseif (is_month()) {
                printf(__('Monthly Archives: %s', 'roots'), get_the_date('F Y'));
            } elseif (is_year()) {
                printf(__('Yearly Archives: %s', 'roots'), get_the_date('Y'));
            } elseif (is_author()) {
                global $post;
                $author_id = $post->post_author;
                printf(__('Author Archives: %s', 'roots'), get_the_author_meta('user_nicename', $author_id));
            } else {
                single_cat_title();
            }
        ?>
    </h3>
    <?php echo category_description(); ?>
    <?php roots_loop_before(); ?>
    <?php get_template_part('loop', 'category'); ?>
    <?php roots_loop_after(); ?>
    <?php roots_content_after(); ?>

<?php get_footer(); ?>

Puede ver algunas de las funciones, como roots_content_before(); En un archivo separado, tengo lo siguiente:

function roots_content_before() { do_action('roots_content_before'); }

y utilícelo de la siguiente manera:

<?php

    add_action('roots_content_before', 'roots_bootstrap_content_before');

    function roots_bootstrap_content_before() { ?>

        this is some text

    <?php }

?>

Por lo que he leído, especialmente si voy a tener grandes fragmentos de código, debería estar usando el búfer de salida, pero cuando trato de hacer esto, me estoy poniendo en cuclillas:

<?php

    add_action('roots_content_before', 'roots_bootstrap_content_before');

    function roots_bootstrap_content_before() { ob_start(); ?> 

        this is some text

       <?php return ob_get_clean();

    }

?>

¿Estoy pensando en esto completamente mal? Todavía estoy aprendiendo, pero lo he intentado un poco sin éxito. Cualquier sugerencia en la dirección correcta sería realmente apreciada. ¡Gracias!

Respuesta:

No, no necesita almacenamiento en búfer de salida en este caso. Como regla general: no utilice el almacenamiento en búfer de salida a menos que sea realmente necesario.

Imagínese lo que sucede si alguien más usa el búfer de salida también desde un complemento y se cruza con el suyo:

// plugin
ob_start();

// later, you in your theme
ob_start();

// you call a function where the plugin author hooked in to call:
print ob_get_clean();

// you call *your*:
return ob_get_clean();

// is is empty!

Esto es realmente difícil de depurar. Evítalo.


No necesita una función separada para cubrir un do_action() simple. Simplemente escriba do_action('roots_content_before'); en tu tema.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım