Erstellen Sie eine 'einzelne' Seite für einen benutzerdefinierten Beitragstyp
4 Antworten
- Stimmen
-
- 2012-04-26
Verwenden Sie
single-{posttype}.php
für dieeinzelne Vorlage.Wenn Sie Ihren Beitragstypmit dem Argumenthas_archive
registrieren,das auftrue
gesetztist,können Siearchive-{posttype}.php
für Ihre verwendenArchivvorlage,mit der Sie die dort vorhandene Abfrage überspringen können,da dasglobale Objekt$wp_query
bereitsmit Ihrembenutzerdefinierten Beitragstypgefülltist.Übrigens,Sie habenein Leerzeichenin Ihrem
post_type
-Argument,wasein Problem sein wird.Überprüfen Sie die Vorlagenhierarchie undbetrachten Sie Registrieren Ihrer CPTsmithilfe von Code in einem Plugin anstatteines CPT-UI-Plugins.
Use
single-{posttype}.php
for the single template. Also, if you register your post type with thehas_archive
argument set totrue
, then you can usearchive-{posttype}.php
for your archive template, which will allow you to skip that query that you have there, since the global$wp_query
object will already be populated with your custom post type.BTW, you have a space in your
post_type
argument, which will be a problem.Check out the Template Hierarchy, and consider registering your CPTs using code in a plugin rather than using a CPT UI plugin.
-
- 2015-04-10
Esistnichterforderlich,da WordPress die Standardseitenvorlage verwendet. Sie könnenjedocheine benutzerdefinierte single-cpt.phperstellen Datei,in der cpt der Name Ihres registrierten Beitragstyps ist.
<?php get_header(); ?> <div id="main-content" class="main-content"> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <?php // Start the Loop. while ( have_posts() ) : the_post(); // Include the page content template. get_template_part( 'content', 'page' ); endwhile; ?> </div><!-- #content --> </div><!-- #primary --> </div><!-- #main-content --> <?php get_sidebar(); get_footer();
There's no need as WordPress will use the default page template however you can create a custom single-cpt.php file where cpt is the name of your registered post type.
<?php get_header(); ?> <div id="main-content" class="main-content"> <div id="primary" class="content-area"> <div id="content" class="site-content" role="main"> <?php // Start the Loop. while ( have_posts() ) : the_post(); // Include the page content template. get_template_part( 'content', 'page' ); endwhile; ?> </div><!-- #content --> </div><!-- #primary --> </div><!-- #main-content --> <?php get_sidebar(); get_footer();
-
- 2012-04-26
Sie können dieseinfachin Ihre single.php-Datei (innerhalb der Schleife) schreiben und alle Felder wiedergeben,die Siein derif-Anweisungbenötigen.
if($post_type == 'case_studies') { // you may need this to be without spaces (machine name) echo '<h1>'.get_the_title().' flavors</h1>'; // post id $post_id = get_the_ID(); get_post_meta($post_id, 'custom_field_name', true); <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a> <?php endwhile; ?> }
Eine weitere Optionist das Erstelleneiner Seitenvorlage.Kopieren Sie Ihre single.php-Datei undbenennen Sie siein case_studies.php um. Obenin den PHP-Tags:
<?php /* Template Name: Brand Output 04/12 */ ?>
undfügen Sie dann dieselbeif-Anweisungin die single.php-Schleifeein wieim obigen Beispiel ...
You could just write this into your single.php file (within the loop) and echo out whatever fields you need within the if statement.
if($post_type == 'case_studies') { // you may need this to be without spaces (machine name) echo '<h1>'.get_the_title().' flavors</h1>'; // post id $post_id = get_the_ID(); get_post_meta($post_id, 'custom_field_name', true); <a href="<?php the_permalink() ?>"><?php the_post_thumbnail(); ?></a> <?php endwhile; ?> }
Another option is t0 create a page template. Copy your single.php file and rename it case_studies.php .. at the top within php tags add:
<?php /* Template Name: Brand Output 04/12 */ ?>
and then add the same if statement within the single.php loop as the above example...
-
Dasfunktioniert,aberesisteine schlechte,schlechte Praxis. Dasnächste,was Siejemalserreichen sollten,ist "get_template_part" ("stuff",$post->post_type); "Thsi works, but it is bad, bad practice, the nearest you should ever get to this is `get_template_part('stuff',$post->post_type);`
- 0
- 2012-04-26
- Tom J Nowell
-
Kannst duerklären,warumes schlechte Praxisist?can you explain why it is bad practice?
- 0
- 2012-04-27
- Starfs
-
Weiles sich um unreinen Code handelt und Sieeine Tonneif else-Anweisungen und doppelten Code haben.Sie sollteneine Vorlagendatei wie "content.php"erstellen und "get_template_part (" content ",$post_type)" ausführen und "content-case_studies.php" verwenden,um siepro Posttyp zu überschreibenBecause it's unclean code, and you have a tonne of if else statements, and duplicated code. You would be better creating a template file like 'content.php', and doing `get_template_part('content',$post_type);` and using `content-case_studies.php` to override it on a per post type basis
- 0
- 2012-04-27
- Tom J Nowell
-
Auf diese Weisebleibt Ihre single.php lesbar.Selbst dann wäreesbesser,es richtig zumachen und `single-case_studies.php` zu verwendenThat way your single.php remains readable. Even then it would eb better ot do it the proper way and use `single-case_studies.php`
- 0
- 2012-04-27
- Tom J Nowell
-
cool.Ich habe den Codein meinem Themageändert,um dieseneue Methode zur Ausgabebenutzerdefinierter Beitragstypen widerzuspiegeln.Dankefür die Warnungcool. I changed the code in my theme to reflect this new method for outputting custom post types. thanks for the heads up
- 3
- 2012-04-30
- Starfs
-
- 2015-04-10
Benutzerdefinierter Beitrag Geben Siein WordPressein. Grundlegende vier Schritte. Schritt 1: Speicherort des Dateipfads:theme/function.phpin Ihrem Thema. Codein function.phpeinfügen (benutzerdefinierten Beitragstyp registrieren)
<?php add_action( 'init', 'custom_post_type_func' ); function custom_post_type_func() { //posttypename = services $labels = array( 'name' => _x( 'Services', 'services' ), 'singular_name' => _x( 'services', 'services' ), 'add_new' => _x( 'Add New', 'services' ), 'add_new_item' => _x( 'Add New services', 'services' ), 'edit_item' => _x( 'Edit services', 'services' ), 'new_item' => _x( 'New services', 'services' ), 'view_item' => _x( 'View services', 'services' ), 'search_items' => _x( 'Search services', 'services' ), 'not_found' => _x( 'No services found', 'services' ), 'not_found_in_trash' => _x( 'No services found in Trash', 'services' ), 'parent_item_colon' => _x( 'Parent services:', 'services' ), 'menu_name' => _x( 'Services', 'services' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'description' => 'Hi, this is my custom post type.', 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes' ), 'taxonomies' => array( 'category', 'post_tag', 'page-category' ), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capability_type' => 'post' ); register_post_type( 'services', $args ); } ?>
Schritt 2: Wie kann derbenutzerdefinierte WordPress-Beitragstyp auf der WordPress-Vorlagenseite angezeigt werden?
Sie können überall auf der Vorlagenseite Folgendes anzeigen:
<?php $args = array( 'post_type' => 'services', 'posts_per_page' => 20 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); ?> <div class="services-items"> <?php the_title(); if ( has_post_thumbnail( $post->ID ) ) { echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">'; echo get_the_post_thumbnail( $post->ID, 'thumbnail' ); echo '</a>'; } ?> </div> <?php endwhile; ?>
Schritt 3: Erstellen Sieeine neue Vorlage,umeinen einzelnen Beitrag wie diesen anzuzeigen
single- {Name desbenutzerdefinierten Beitragstyps} .php oder single-services.php
Schritt 4: Codein die Datei single-services.phpeinfügen
<?php /* The loop */ ?> <?php while ( have_posts() ) : the_post(); ?> <div class="main-post-div"> <div class="single-page-post-heading"> <h1><?php the_title(); ?></h1> </div> <div class="content-here"> <?php the_content(); ?> </div> <div class="comment-section-here" <?php //comments_template(); ?> </div> </div> <?php endwhile; ?>
Diesistein Beispielfüreinen benutzerdefinierten Beitragstypmit einereinzelnen Beitragsseite.
Custom Post Type in wordpress.Basic four steps.Step1: File Path location : theme/function.php in your theme.Paste code in function.php (register custom post type )
<?php add_action( 'init', 'custom_post_type_func' ); function custom_post_type_func() { //posttypename = services $labels = array( 'name' => _x( 'Services', 'services' ), 'singular_name' => _x( 'services', 'services' ), 'add_new' => _x( 'Add New', 'services' ), 'add_new_item' => _x( 'Add New services', 'services' ), 'edit_item' => _x( 'Edit services', 'services' ), 'new_item' => _x( 'New services', 'services' ), 'view_item' => _x( 'View services', 'services' ), 'search_items' => _x( 'Search services', 'services' ), 'not_found' => _x( 'No services found', 'services' ), 'not_found_in_trash' => _x( 'No services found in Trash', 'services' ), 'parent_item_colon' => _x( 'Parent services:', 'services' ), 'menu_name' => _x( 'Services', 'services' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, 'description' => 'Hi, this is my custom post type.', 'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'page-attributes' ), 'taxonomies' => array( 'category', 'post_tag', 'page-category' ), 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'show_in_nav_menus' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'has_archive' => true, 'query_var' => true, 'can_export' => true, 'rewrite' => true, 'capability_type' => 'post' ); register_post_type( 'services', $args ); } ?>
Step2: how can show wordpress custom post type in wordpress template page ?
You can show anywhere in template page like this :
<?php $args = array( 'post_type' => 'services', 'posts_per_page' => 20 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); ?> <div class="services-items"> <?php the_title(); if ( has_post_thumbnail( $post->ID ) ) { echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">'; echo get_the_post_thumbnail( $post->ID, 'thumbnail' ); echo '</a>'; } ?> </div> <?php endwhile; ?>
Step3: Create new template for show single post like this
single-{custom post type name}.php or single-services.php
Step4: Paste code in single-services.php file
<?php /* The loop */ ?> <?php while ( have_posts() ) : the_post(); ?> <div class="main-post-div"> <div class="single-page-post-heading"> <h1><?php the_title(); ?></h1> </div> <div class="content-here"> <?php the_content(); ?> </div> <div class="comment-section-here" <?php //comments_template(); ?> </div> </div> <?php endwhile; ?>
This is custom post type example with single post page.
Ok,ich habe das UI-Pluginfürbenutzerdefinierte Post-Typeninstalliert undeineserstellt.Ich habe danneinen neuen Beitrag hinzugefügt.Inmeinem Thema habeicheinen Code wie diesen:
Erstens,wennich auf das Miniaturbild klicke,wirdim Browsereine Fehlermeldung angezeigt,dasses sichin einer Umleitungsschleifebefindet. Zweitensmöchteichgenau wissen,welche Dateienicherstellenmuss,umeinen einzelnen Beitrag diesesbenutzerdefinierten Beitrags anzuzeigenArt.Und wasin diese Datei zu setzen.