WordPressi mallid algajatele: HTML-i kutsumine PHP-le
Eile visandasin, kuidas mõista, kui paljud meist on tõenäoliselt harjunud WordPressi mallidega töötama.
Ehkki CSS-i ja JavaScripti probleemide eraldamine on kindel, on mallid problemaatilised alati, kui meie märgistusega on segatud palju PHP-d.
Selguse huvides ütlen, et me ei saa jätta lisamata mallimärgendeid, kuna see on WordPressi ja üldiste PHP-põhiste sisuhaldussüsteemide tööpõhimõte.
Probleem ilmneb alati, kui töötame mallidega, mis sisaldavad koodi, mis teeb keerukamaid kõnesid erinevatele API-dele. Kuigi ma demonstreerisin seda WP_Query abil (ja teen seda ka edaspidi), pole see ainult see päring.
Igatahes, mida me peaksime sellega peale hakkama?
WordPressi mallid: kui HTML kutsub PHP-d
Esiteks on oluline mõelda, miks on nii palju PHP-d ja juurdehindlust segada halb mõte.
Lihtne on öelda, et see raskendab koodi kuivana hoidmist (ja selles on tõde), aga mis siis, kui kasutame ainult ühte päringut või ühte koodiplokki? Kas KUIV olemine on siis tõesti nii oluline?
Selguse huvides, jah, ma arvan, et see on oluline koodi kuivana hoidmiseks, kuid kui me kasutame kõnet ainult korra, siis arvan, et see on oluline mitte muul põhjusel kui malli koodi puhtana hoidmine. võimalik.
Mõelge sellele järgmiselt: kui tahame kuvada postituse pealkirja, sisu ja autorit, vajame ainult kolme funktsiooni:
Nii et kujutage ette järgmise koodi kohandamist (mida vaatasime eelmises postituses):
<div id="content-container">
<p>
Oh! The garbage chute was a really wonderful idea. What an incredible smell you've discovered! Let's get out of here!
Get away from there... No! wait! Will you forget it? I already tried it. It's magnetically sealed! Put that
thing away! You're going to get us all killed.
</p>
<h2>List of Post Titles For Acme Post Type</h2>
<?php
$args = array(
'post_status' => 'publish',
'post_type' => 'acme',
'posts_per_page' => '10'
);
$custom_query = new WP_Query( $args );
if ($custom_query->have_posts()) {
echo '<ul>';
while ($custom_query->have_posts()) {
$custom_query->the_post();
echo '<li>'. get_the_title(). '</li>';
}
echo '</ul>';
wp_reset_postdata();
}
?>
<p>
Absolutely, Your Worship. Look, I had everything under control until you led us down here. You know, it's not
going to take them long to figure out what happened to us. It could be worst... It's worst.
There's something alive in here! That's your imagination. Something just moves past my leg!
Look! Did you see that? What? Help!
</p>
</div><!-- #content-container -->
Et välja näha midagi sellist:
<div id="content-container">
<p>
Oh! The garbage chute was a really wonderful idea. What an incredible smell you've discovered! Let's get out of here!
Get away from there... No! wait! Will you forget it? I already tried it. It's magnetically sealed! Put that
thing away! You're going to get us all killed.
</p>
<h2>List of Post Titles For Acme Post Type</h2>
<?php acme_get_titles(); ?>
<p>
Absolutely, Your Worship. Look, I had everything under control until you led us down here. You know, it's not
going to take them long to figure out what happened to us. It could be worst... It's worst.
There's something alive in here! That's your imagination. Something just moves past my leg!
Look! Did you see that? What? Help!
</p>
</div><!-- #content-container -->
Palju puhtam, eks? Kuid see, mida näete, on rohkem kui see. Täpsemalt, kui me töötame HTML-iga kulisside taga, peame veenduma, et desinfitseerime selle õigesti, kasutades midagi sellist nagu wp_kses :
<?php
/**
* Runs a custom query to get the most recent ten published articles of the
* acme post type and then prints a sanitized list of the the titles.
*/
function acme_get_titles()
{
$args = array(
'post_status' => 'publish',
'post_type' => 'acme',
'posts_per_page' => '10'
);
$custom_query = new WP_Query( $args );
if ($custom_query->have_posts()) {
$html = '<ul>';
while ($custom_query->have_posts()) {
$custom_query->the_post();
$html .= '<li>'. get_the_title(). '</li>';
}
$html .= '</ul>';
wp_reset_postdata();
}
echo _acme_sanitize_titles($html);
}
/**
* Uses the WordPress wp_kses() API to sanitize and echo the incoming markup.
*
* @param string $html The HTML to sanitize.
*/
function _acme_sanitize_titles($html) {
if(empty($html)) {
echo $html;
}
echo wp_kses(
$html,
array(
'ul' => array(),
'li' => array(),
);
);
}
Nüüd peavad mõned arendajad ideed HTML-i kajast PHP-st WordPressi mallidesse vastukaaluks. Ja see pole alusetu.
Selle sarja jooksul tuleb siiski mängida tasakaalustavat tegevust: tuleb tutvustada, kuidas inimesed sageli teavet esitavad, ja seejärel seda pisut puhastada.
Et seda natuke kaugemale viia, on võimalik – ja see pole üldse halb mõte – eraldada funktsioon WP_Query veelgi, et kasutada get_template_part. See sisaldab natuke puhtamat koodi, kuid nõuab ka seda, et me vaataksime seda funktsiooni põhjalikult.
Ja see on midagi, millest ma selles konkreetses sarjas ei ole huvitatud.
Kuidas peaksime seda visualiseerima?
Mis puutub mallidesse, siis saame seda kontseptualiseerida mitmel erineval viisil.
- Mõnes mallikeeles on kasulik mõelda, et PHP sisestab teabe malli,
- Ülaltoodud näites on kasulik mõelda mallifailile, mis nõuab PHP-skriptilt teavet.
Nii et ülaltoodud näites on meil funktsioon, mis asub näiteks failis functions.php ja seda kutsuv mallifail:
On loogiline? Kuid see, kuidas see saavutatakse – selle ühe funktsioonikõne taga oleva koodi osas – on postituse sisu omaette.
Ja seda ma järgmises postituses vaatlen.