Как выводить объекты кастомных типов постов на страницы сайта?
При помощи плагина Custom Post Type UI создал тип поста и теперь хочу вывести объекты на главную страницу.
Использую тему: https://github.com/understrap/understrap и соответствующую для нее дочернюю тему.
Здравствуйте!
Чтобы вывести записи из кастомного типа записи используйте WP_Query, а в параметрах укажите тип записи и таксономию (если создавали). https://wp-kama.ru/function/wp_query
Обратите внимание на:
post_type
taxonomy
<?php
// запрос
$property = new WP_Query(array(
'post_type' => 'property',
'post_status' => 'publish',
'posts_per_page' => -1
));
?>
<?php if ( $property->have_posts() ) : ?>
<ul>
<!-- the loop -->
<?php while ( $property->have_posts() ) : $property->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
<!-- end of the loop -->
</ul>
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e( 'Извините, нет записей, соответствуюших Вашему запросу.' ); ?></p>
<?php endif; ?>
Но так как данный файл подгружается в цикл вывода статей в файле index.php, получается цикл в цикле и все записи будут многократно выводиться на сайт.
Исходный код index.php:
<?php
/**
* The main template file.
*
* This is the most generic template file in a WordPress theme
* and one of the two required files for a theme (the other being style.css).
* It is used to display a page when nothing more specific matches a query.
* E.g., it puts together the home page when no home.php file exists.
* Learn more: http://codex.wordpress.org/Template_Hierarchy
*
* @package understrap
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
get_header();
$container = get_theme_mod( 'understrap_container_type' );
?>
<?php if ( is_front_page() && is_home() ) : ?>
<?php get_template_part( 'global-templates/hero' ); ?>
<?php endif; ?>
<div class="wrapper" id="index-wrapper">
<div class="<?php echo esc_attr( $container ); ?>" id="content" tabindex="-1">
<div class="row">
<!-- Do the left sidebar check and opens the primary div -->
<?php get_template_part( 'global-templates/left-sidebar-check' ); ?>
<main class="site-main" id="main">
<?php if ( have_posts() ) : ?>
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php
/*
* Include the Post-Format-specific template for the content.
* If you want to override this in a child theme, then include a file
* called content-___.php (where ___ is the Post Format name) and that will be used instead.
*/
get_template_part( 'loop-templates/content', get_post_format() );
?>
<?php endwhile; ?>
<?php else : ?>
<?php get_template_part( 'loop-templates/content', 'none' ); ?>
<?php endif; ?>
</main><!-- #main -->
<!-- The pagination component -->
<?php understrap_pagination(); ?>
<!-- Do the right sidebar check -->
<?php get_template_part( 'global-templates/right-sidebar-check' ); ?>
</div><!-- .row -->
</div><!-- #content -->
</div><!-- #index-wrapper -->
<?php get_footer(); ?>