Czy mogę przypisać plik szablonu do niestandardowego typu postu?
Utworzyłem niestandardowy typ postu o nazwie items
i chciałbym przypisywać szablony do elementów, tak jak możesz to zrobić ze stronami.
Czy mogę przypisać plik szablonu do niestandardowego typu postu?
Utworzyłem niestandardowy typ postu o nazwie items
i chciałbym przypisywać szablony do elementów, tak jak możesz to zrobić ze stronami.
Odpowiedzi:
Od wersji 4.7 WordPressa możesz teraz przypisywać niestandardowe szablony stron innym typom postów wraz ze stroną.
Aby to osiągnąć oprócz nagłówka pliku Nazwa szablonu, typy postów obsługiwane przez szablon można określić za pomocą Typu szablonu Szablon: w następujący sposób.
<?php
/*
Template Name: Full-width page layout
Template Post Type: post, page, product
*/
Możesz uzyskać więcej informacji na ten temat na następnych stronach.
https://wptavern.com/wordpress-4-7-brings-custom-page-template-functionality-to-all-post-types https://make.wordpress.org/core/2016/11/03/post -type-templates-in-4-7 /
Możesz utworzyć szablon dla niestandardowych typów postów, tworząc pliki, takie jak na przykład:
single-mycustomposttype.php
Zobacz Hierarchia szablonów w kodeksie.
PS : na to już odpowiedziano.
Oto, co działa dla mnie:
add_filter('single_template', function($original){
global $post;
$post_name = $post->post_name;
$post_type = $post->post_type;
$base_name = 'single-' . $post_type . '-' . $post_name . '.php';
$template = locate_template($base_name);
if ($template && ! empty($template)) return $template;
return $original;
});
W ten sposób dany post o niestandardowym typie postu foobar
i informacja o hello-world
powyższym kodzie załadowałyby single-foobar-hello-world.php
szablon, gdyby istniał.
Dla osób docierających do tego wątku za pośrednictwem Google WP 4.7 wprowadził szablony dla wszystkich typów postów. Zobacz Make WP Core, aby uzyskać pełny przewodnik. Nie jesteś już ograniczony do jednego szablonu dla całego CPT, możesz przypisywać pojedyncze szablony pocztą, tak jak w przypadku Pages.
To jest trochę stare, ale możesz także spróbować:
Utwórz szablon dla niestandardowego typu postu:
single-*custom-post-type-slug*.php
Plik powinien sprawdzić informacje o pracy i sprawdzić, czy plik istnieje, jeśli nie, powrót do domyślnego pliku szablonu:
<?php
$slug = get_post_field( 'post_name', get_post() );
$slug = ( locate_template( 'templates/*custom-post-type-slug*/' . $slug . '.php' ) ) ? $slug : 'default';
get_template_part( 'templates/*custom-post-type-slug*/' . $slug );
?>
Zastąpić wszystkie wystąpienia niestandardowych typu Post-ślimak z rzeczywistą ślimak swojego niestandardowego typu post.
Robię to dla łatwości użycia i celów organizacyjnych. Wydaje mi się czystsze niż posiadanie wszystkich plików w folderze głównym motywu.
przykładowa struktura folderów:
themeroot
| |single-cases.php
|-templates
| --cases
| |default.php
| |case-one.php
| |case-two.php
Najpierw utwórz stronę o nazwie Pozycje jako twoje życzenie, która wyświetla treść z typów postów elementów, a następnie utwórz jeden plik szablonu, jak poniżej, i nazwij ten element szablonu. Wybierz szablon dla utworzonej strony.
<div class="container">
<div class="row">
<div class="col-md-9">
<div class="panel panel-default text-center">
<?php $loop = new WP_Query( array( 'post_type' => 'items', 'posts_per_page' => 5 ) ); ?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<?php the_title();?>
<?php if(has_post_thumbnail() ) { the_post_thumbnail(); } ?>
<?php the_content();?>
<?php endwhile; ?>
<?php wp_reset_query(); ?>
</div>
</div>
</div>
</div>
To jest bardzo proste do zrobienia.
Utwórz nowy plik PHP w katalogu głównym motywu i dodaj go do góry:
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
Pełny przykład będzie następujący:
<?php /*
* Template Name: My custom view
* Template Post Type: Post_typename // here you need to add the name of your custom post type
*/ ?>
<?php get_header();?>
<div class="container pt-5 pb-5">
<?php if (has_post_thumbnail()):?>
<img src="<?php the_post_thumbnail_url('largest');?>" class="img-fluid">
<?php endif;?>
<?php if (have_posts()) : while (have_posts()) : the_post();?>
<?php the_content();?>
<?php endwhile; endif;?>
</div>
<?php get_footer();?>
Opracowaliśmy inne rozwiązanie przy użyciu niestandardowej wtyczki szablonu postu