Wie man allen CPT automatisch einen Ordner basierend auf ihrem Slug gibt

Das habe ich jetzt und arbeite:

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' ); 

Aber ich möchte so etwas:

 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; } 

Ich habe diesen Fehler erhalten. Warnung: Ungültiges Argument für foreach () angegeben

Solutions Collecting From Web of "Wie man allen CPT automatisch einen Ordner basierend auf ihrem Slug gibt"

Deine zweite function ist falsch. get_post_type($post) schließt das aktuelle Post-Objekt oder die Post-ID oder ein Post-Objekt oder eine ID aus, das / die ihm gegeben wurde. Sie verwenden die Argumente für get_post_types( $args, $output, $operator ) für get_post_type , wodurch die function fehlschlägt, die wiederum den Fehler in Ihrer foreach Schleife verursacht.

Verwenden Sie etwas wie folgt, um Ihre function zu korrigieren:

 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; }