Создайте «единую» страницу для произвольного типа сообщения
4 ответ
- голосов
-
- 2012-04-26
Используйте
single-{posttype}.php
для одного шаблона.Кроме того,если вы зарегистрируете свой тип сообщения с аргументомhas_archive
,для которого установлено значениеtrue
,тогда вы можете использоватьarchive-{posttype}.php
для своегошаблон архива,который позволит вам пропустить этот запрос,который у вас есть,поскольку глобальный объект$wp_query
уже будет заполнен вашим пользовательским типом сообщения.Кстати,у вас есть пробел в аргументе
post_type
,и это будет проблемой.Ознакомьтесь с иерархией шаблонов и подумайте о регистрация CPT с помощью кода в подключаемом модуле,а не с помощью подключаемого модуля CPT UI.
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
В этом нет необходимости,поскольку WordPress будет использовать шаблон страницы по умолчанию,однако вы можете создать собственный single-cpt.php ,где cpt - это имя вашего зарегистрированного типа сообщения .
<?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
Вы можете просто записать это в свой файл single.php (внутри цикла) и вывести все поля,которые вам нужны,в оператореif.
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; ?> }
Другой вариант - создать шаблон страницы.Скопируйте файл single.php и переименуйте его case_studies.php .. вверху в тегахphp добавьте:
<?php /* Template Name: Brand Output 04/12 */ ?>
,а затем добавьте в цикл single.php тот же операторif,что и в приведенном выше примере ...
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...
-
Это работает,но это плохая,плохая практика. Ближайшее,к чему вы должны подойти,- это `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
-
Вы можете объяснить,почему это плохая практика?can you explain why it is bad practice?
- 0
- 2012-04-27
- Starfs
-
Потому что это нечистый код,и у вас есть тонна операторовif else и дублированный код.Вам было бы лучше создать файл шаблона,такой как 'content.php',и выполнить `get_template_part ('content',$post_type);` и использовать `content-case_studies.php`,чтобы переопределить его для каждого типа сообщенияBecause 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
-
Таким образом,ваш single.php останется читаемым.Даже тогда было бы лучше не делать это должным образом и использовать `single-case_studies.php`That 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. 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
Пользовательский тип сообщения в wordpress. Основные четыре шага. Шаг 1: Расположение пути к файлу:theme/function.php в вашей теме. Вставьте код вfunction.php (зарегистрируйте пользовательский тип сообщения)
<?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 ); } ?>
Шаг 2: как отобразить пользовательский тип сообщения WordPress на странице шаблона WordPress?
Вы можете отобразить в любом месте страницы шаблона следующим образом:
<?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; ?>
Шаг 3. Создайте новый шаблон для показа одного такого сообщения
single- {название произвольного типа сообщения} .php или же single-services.php
Шаг 4. Вставьте код в файл single-services.php
<?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; ?>
Это пример настраиваемого типа сообщения со страницей с одним сообщением.
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.
Хорошо,я установил плагин пользовательского интерфейса Custom Post Type и создал его.Затем я добавил к нему новый пост.В моей теме есть такой фрагмент кода:
Теперь,во-первых,если я нажимаю на миниатюру,я получаю сообщение об ошибке в браузере,говоря,что он находится в цикле перенаправления,но,во-вторых,я хотел бы точно знать,какие файлы мне нужно создать,чтобы просмотреть отдельную публикацию этого пользовательского сообщения.тип.И что поместить в этот файл.