WordPress
template_include
Sök…
parametrar
Parameter | Förklaring |
---|---|
$template | Skickar en parameter till filtret, $template är den aktuella sökvägen till lämplig fil för posttypen som finns i det aktiva underordnatema eller föräldertema (om inget barntema på plats eller underordnatema har lägre rangordnade mallar. Se ordpressmallhierarki för mer detaljer). |
Anmärkningar
Du måste returnera $template
även om du inte ändrar. Om detta förvirrar, titta på exempel där apply_filter()
har använts i kod
Du bör inte ställa in variabler här för användning senare, det finns bättre krokar för detta.
Ett användbart programflöde för detta filter är:
- Kontrollera
$template
innehåller vårt anpassade posttypnamn -> mallhierarki !! - Om inte, sök i vår plugin efter lämpliga filer -> Det är bättre att peka på specifika filer snarare än att söka igenom mappar efter filer. Mer effektiv. Men helt upp till utvecklaren.
- returnera mallen.
Enkelt exempel
Detta filter är mycket användbart. Ett av de vanliga problemen för utvecklare är hur man inkluderar mallar i plugins som de utvecklar.
Filtret appliceras omedelbart efter att wordpress har hittat rätt mall i det aktiva barnet / föräldertemaet med hjälp av wp-hierarkin.
Var noga med att definiera när du vill ändra mallvägen. I exemplet nedan kontrollerar koden för att se om den aktuella sidan är den enda vyn för vår anpassade cpt
.
Enkelt nog exempel för att komma igång med!
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;
}
Mer Adv-exempel
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;
}