web-dev-qa-db-fra.com

Comment retourner plusieurs lignes dans un shortcode?

J'ai trouvé cet exemple de shortcode sur Internet:

function project_shortcode( $atts, $content = null ) {
    extract( shortcode_atts( array(
        'class' => '',
        'id' => '',
        ), $atts ) );

        return '<div id="' . $id . '" class="' . $class . '">' . $content . '</div>';

}
add_shortcode('button', 'project_shortcode');

C'est la sortie que je veux:

<div class="container item">
    <div class="row">
        <div class="intro twelvecol">
            <div class="top-border"></div>
        </div>
        <div class="screenshot eightcol">
            <img src="<?php bloginfo( 'template_url' ); ?>/images/studyatbest.png">
        </div>
        <div class="screenshot fourcol last">
            <h3>BEST LANGUAGE CENTER</h3>
            <p>BEST Language Center is an educational establishment in Taichung, Taiwan. I was asked to build and design a website they could use to offer classes, programs and display photos online.</p>
            <ul>
                <li>
                    <h4>ROLE</h4>
                    <p>Design, HTML/CSS, JavaScript</p>
                <li>
                    <h4>YEAR</h4>
                    <p>2010</p>
                </li>
                <li>
                    <h4>WEBSITE</h4>
                    <p><a href="http://studyatbest.com/">studyatbest.com</a></p>
                </li>
            </ul>
        </div>
    </div>
</div>

Mais je ne suis pas sûr de savoir comment le faire pour pouvoir retourner plusieurs lignes dans le shortcode (afin de garder le code propre). Aucune suggestion?

2
janoChen

N'utilisez pas la mise en mémoire tampon de sortie. Il est trop lent et parfois difficile à déboguer. Utilisez heredoc .

Exemple:

$output = <<<MYUNIQUENAME
    <div>$foo
      <p>Some $bar</p>
    </div>
MYUNIQUENAME;
1
fuxia

Je l'ai:

// Project shortcode
function project_shortcode( $atts, $content = null ) {
    extract( shortcode_atts( array(
        'client' => '',
        'screenshot' => '',
        'role' => '',
        'year' => '',
        'website' => '',
        ), $atts ) );

        ob_start();
    ?>

    <div class="container item">
        <div class="row">
            <div class="intro twelvecol">
                <div class="top-border"></div>
            </div>
            <div class="screenshot eightcol">
                <img src="<?php bloginfo( 'template_url' ); ?>/images/<?php echo $screenshot ?>">
            </div>
            <div class="screenshot fourcol last">
                <h3><?php echo $client ?></h3>
                <p><?php echo $content ?></p>
                <ul>
                    <li>
                        <h4>ROLE</h4>
                        <p><?php echo $role ?></p>
                    <li>
                        <h4>YEAR</h4>
                        <p><?php echo $year ?></p>
                    </li>
                    <li>
                        <h4>WEBSITE</h4>
                        <p><a href="http://<?php echo $website ?>"><?php echo $website ?></a></p>
                    </li>
                </ul>
            </div>
        </div>
    </div>

    <?php
        return ob_get_clean();
}
add_shortcode('project', 'project_shortcode');

(S'il vous plaît dites-moi s'il y a une mauvaise pratique dans ce code).

2
janoChen