web-dev-qa-db-fra.com

Comment donner à tous les CPT un dossier automatiquement basé sur leur slug

C'est ce que j'ai maintenant et travaille:

function get_custom_post_type_template($single_template) {
global $post;

if ($post->post_type == 'Amazon') {
$single_template = TEMPLATEPATH . '/Amazon/single.php';
}
return $single_template;
}
add_filter( 'single_template', 'get_custom_post_type_template' );

Mais je veux quelque chose comme ça:

add_filter('single_template', 'my_single_template_folders_terms');
function my_single_template_folders_terms($template) {
global $wp_query;
foreach( get_post_type(array('public' => true, '_builtin' => false)) as $post_type ) {
if ( file_exists(TEMPLATEPATH . "/{$post_type->slug}/single.php") )
        return TEMPLATEPATH . "/{$post_type->slug}/single.php";
}
return $template;
}

J'ai eu cette erreur; Avertissement: argument non valide fourni pour foreach ()

1
Marc P Gangmei

Votre deuxième fonction est fausse. get_post_type($post) exclut l'objet ou l'ID de publication en cours, ou tout objet ou ID de publication qui lui est attribué. Vous utilisez les arguments de get_post_types( $args, $output, $operator ) pour get_post_type, qui échoue pour la fonction qui vous donne à son tour l'erreur dans votre boucle foreach.

Pour rectifier votre fonction, utilisez quelque chose comme ceci:

add_filter('single_template', 'my_single_template_folders_terms');
function my_single_template_folders_terms($template) {
    global $post;

    $post_type = get_post_type($post);
    if ( file_exists(TEMPLATEPATH . "/{$post_type}/single.php") )
        return TEMPLATEPATH . "/{$post_type}/single.php";

    return $template;
}
0
Pieter Goosen