WordPress
template_include
Zoeken…
parameters
Parameter | Uitleg |
---|---|
$template | Geeft één parameter door aan het filter, $template is het huidige pad naar het juiste bestand voor het posttype zoals gevonden in het actieve child-thema of het parent-thema (als er geen child-thema aanwezig is of child-thema lager gerangschikte sjablonen heeft. Zie wordpress-sjabloonhiërarchie voor meer details). |
Opmerkingen
U moet $template
retourneren, zelfs als u deze niet wijzigt. Als u hierdoor in de war apply_filter()
, kunt u voorbeelden bekijken waarin apply_filter()
in de code is gebruikt
Je moet hier geen variabelen instellen voor later gebruik, hiervoor zijn betere haken.
Een nuttige programmastroom voor dit filter is:
- Controleer
$template
bevat onze aangepaste berichttype naam -> sjabloonhiërarchie !! - zo niet, zoek dan in onze plug-in naar geschikte bestanden -> Het is beter om naar specifieke bestanden te wijzen in plaats van in mappen naar bestanden te zoeken. Efficiënter. Maar helemaal aan de ontwikkelaar.
- stuur de sjabloon terug.
Eenvoudig voorbeeld
Dit filter is erg handig. Een van de veel voorkomende problemen voor ontwikkelaars is hoe ze sjablonen kunnen opnemen in plug-ins die ze ontwikkelen.
Het filter wordt onmiddellijk toegepast nadat WordPress de juiste sjabloon in het actieve child / parent-thema heeft gevonden met behulp van de wp-hiërarchie.
Zorg ervoor dat u definieert wanneer u het sjabloonpad wilt wijzigen. In het onderstaande voorbeeld controleert de code of de huidige pagina de enkele weergave is van ons aangepaste cpt
.
Eenvoudig genoeg voorbeeld om mee te beginnen!
add_filter('template_include', 'custom_function');
function custom_function($template){
//change a single post template...
if( is_singular('cpt') ){
$template= 'path/to/another/template_file';
}
return $template;
}
Meer Adv voorbeeld
add_filter('template_include', 'custom_function');
function custom_function($template){
/*
* This example is a little more advanced.
* It will check to see if $template contains our post-type in the path.
* If it does, the theme contains a high level template e.g. single-cpt.php
* If not we look in the plugin parent folder for the file. e.g. single-cpt.php
*/
//check to see if the post type is in the filename (high priority file)
//return template if it is!
global $post;
if( strpos($template, 'single-'.$post->post_type.'php' ) !== false && strpos($template, 'archive-'.$post->post_type.'php' ) !== false ){
return $template;
}
$plugin_path = 'var/etc/wp-content/plugins/plugin'; //include own logic here...
if( is_singular($post->post_type) && file_exists($plugin_path.'/single-'.$post->post_type.'.php') ){
$template= $plugin_path.'/single-'.$post->post_type.'.php';
} elseif ( is_archive($post->post_type) && file_exists($plugin_path.'/archive-'.$post->post_type.'.php') ) {
$template= $plugin_path.'/archive-'.$post->post_type.'.php';
}
return $template;
}