Поддержка Проблемы и решения Вывод кастомных постов

  • Решено shiva2019

    (@shiva2019)


    Всем привет.

    Тема вероятно бородатая, но что то не могу найти ответа. Несколько дней этим занимаюсь, а успехов не добился. И гуглил и на wp_kama искал..но ответа не нашел

    Мне нужно вывести кастомные посты как по кастомной рубрике, так и без ее учета.

    Создал кастомный тип записей и кастомную таксономию.

    Затем добавил новую таксономию(в кастомной), а так же пост(кастомный), где указал эту кастомную таксономию.

    
    function wptp_create_post_type() {
    	$labels = array(
    		'name' => __( 'Articles' ),
    		'singular_name' => __( 'Articles' ),
    		'add_new' => __( 'New Article' ),
    		'add_new_item' => __( 'Add New Article' ),
    		'edit_item' => __( 'Edit Article' ),
    		'new_item' => __( 'New Article' ),
    		'view_item' => __( 'View Article' ),
    		'search_items' => __( 'Search Articles' ),
    		'not_found' =>  __( 'No Articles Found' ),
    		'not_found_in_trash' => __( 'No Articles found in Trash' ),
    	);
    	$args = array(
    		'labels' => $labels,
    		'has_archive' => true,
    		'public' => true,
    		'hierarchical' => false,
    		'menu_position' => 5,
    		'supports' => array(
    			'title',
    			'editor',
    			'excerpt',
    			'custom-fields',
    			'thumbnail'
    		),
    		'taxonomies' => array('articles_category'),
    	);
    	register_post_type( 'articles', $args );
    }
    add_action( 'init', 'wptp_create_post_type' );
    
    function wptp_register_taxonomy() {
    	register_taxonomy( 'articles_category', 'articles',
    		array(
    			'labels' => array(
    				'name'              => 'Article Categories',
    				'singular_name'     => 'Article Category',
    				'search_items'      => 'Search Article Categories',
    				'all_items'         => 'All Article Categories',
    				'edit_item'         => 'Edit Article Categories',
    				'update_item'       => 'Update Article Category',
    				'add_new_item'      => 'Add New Article Category',
    				'new_item_name'     => 'New Article Category Name',
    				'menu_name'         => 'Article Category',
    			),
    			'hierarchical' => true,
    			'sort' => true,
    			'args' => array( 'orderby' => 'term_order' ),
    			'show_admin_column' => true
    		)
    	);
    }
    add_action( 'init', 'wptp_register_taxonomy' );
    

    как вывести этот кастомный пост, а так же вывести по кастомной таксономии все посты для этого таксономии (рубрике)?

    Обычные записи по категории(рубрике) я выводил подобным образом (не для кастомных)

            <?php
            $posts = get_posts( array(
                'numberposts' => 0,
                'category'    => 3,
                'orderby'     => 'date',
                'order'       => 'ASC',
                'include'     => array(),
                'exclude'     => array(),
                'meta_key'    => '',
                'meta_value'  =>'',
                'post_type'   => 'post',
                'suppress_filters' => true,
            ) );
    
            foreach( $posts as $post ){
                setup_postdata($post);
                ?>
                <a href="<?php echo get_page_link(10);?>"><div class="cards-container__item">
                        <div class="cards-container__item__img">
                            <img src="<?php the_post_thumbnail_url()?>" alt="<?php the_title()?>">
                        </div>
                        <p class="cards-container__item__text"><?php the_title()?></p>
                    </div></a>
                <?php
            }
    
            wp_reset_postdata(); // сброс
            ?>
    

    отдельный пост (не кастомный) вывожу так:

    
            <?php $the_query = new WP_Query('p=164'); ?> 
            <?php while  ($the_query->have_posts() ) : $the_query->the_post(); ?>
    
                <h2 class="cat-name" id="cat2"><?php the_title(); ?></h2>
                <p class="base-text mb40"> <?php echo strip_tags(get_the_content(), '<p>'); ?></p>
    
            <?php endwhile; ?>
            <?php wp_reset_postdata();?>
    
    

    Подскажите пожалуйста , как в случае с кастомными постами сделать аналогичный вывод по рубрике и по отдельным записям?

    Заранее спасибо за помощь.

    • Тема изменена 5 месяцев назад пользователем shiva2019.
    • Тема изменена 5 месяцев назад пользователем shiva2019.
    • Тема изменена 5 месяцев назад пользователем shiva2019.
    • Тема изменена 5 месяцев назад пользователем shiva2019.
    • Тема изменена 5 месяцев назад пользователем shiva2019.
    • Тема изменена 5 месяцев назад пользователем shiva2019.
Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Поковырялся еще с этим вопросом.

    Если в аргументах указать тип поста post-type, но не указывать ни номер категории «category» ни имя категории category_name то посты выводятся

    
    	<?php
    	$args = array('post_type' => 'articles', 'posts_per_page' => 5,   );
    	$myposts = get_posts( $args );
    	foreach( $myposts as $post ){ setup_postdata($post);
    		?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    		<?php
    	}
    	wp_reset_postdata();
    	?>
    

    Как же вывести посты по категории(рубрике) кастомной?

    • Ответ изменён 5 месяцев назад пользователем shiva2019.

    Разобрался..вот стоит на форум написать как приходит озарение. Вот и ответ.

    
    <ul>
    	<?php
    	$args = array('post_type' => 'articles', 'posts_per_page' => 5, 'taxonomy' => 'articles_category'  );
    	$myposts = get_posts( $args );
    	foreach( $myposts as $post ){ setup_postdata($post);
    		?>
            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    		<?php
    	}
    	wp_reset_postdata();
    
    	?>
    
    </ul>
    

    Все хорошо да не все.

    Сделал я свой кастомный тип постов. Привязал созданную кастомную таксономию к этому типу постов.

    Далее в таксономии создал древовидную структуру рубрик.

    Создал посты в которых указал созданные рубрики в кастомной таксономии.

    Как мне вывести свои кастомные посты, принадлежащие отдельным рубрикам в кастомной таксономии?

    например.
    тип постов goods

    таксономия goods_taxonomy

    в goods_taxonomy сделал рубрики product1 и product2

    создал несколько записей связав их с рубрикой product1 и несколько с product2

    как мне вывести записи только из product1?

    Заранее спасибо за помощь

    • Ответ изменён 4 месяца, 3 недели назад пользователем shiva2019.
    • Ответ изменён 4 месяца, 3 недели назад пользователем shiva2019.

    как мне вывести записи только из product1?

    Вордпресс сам выведет по ссылке /goods_taxonomy/product1/

    Какой шаблон использует — см. https://developer.wordpress.org/themes/basics/template-hierarchy/#custom-taxonomies

    Прошу прощения. Но не очень понятно.

    Я уже работал с шаблонами, такими как header и page. Когда делаешь например header-main.php и после к примеру page-main.php указывать get_header(‘main’). Как это работает понятно.

    А с шаблонами по ссылке выше — не понятно.

    На каждую рубрику пользовательской таксономии нужно создавать свой шаблон?

    А внутри в нем что должно быть?

    Чем код внутри будет отличаться от того чем я пытался вывести посты?

    Пожалуйста не воспринимайте мои слова будто я умничаю. Мне просто не понятно..

    Вот как пример, в стандартных рубриках я указываю категорию и все..посты выводятся..ниже пример вывод постов с обычными рубриками. Для кастомных аналогичного варианта нет?

    
                    $posts = get_posts( array(
                'numberposts' => 0,
    
                'category'    => 10,
                'orderby'     => 'date',
                'order'       => 'ASC',
                'include'     => array(),
                'exclude'     => array(),
                'meta_key'    => '',
                'meta_value'  =>'',
                'post_type'   => 'post',
                'suppress_filters' => true,
            ) );
    
            foreach( $posts as $post ){
                setup_postdata($post);
        
            }
            wp_reset_postdata();
    

    я пробовал вот такой вариант:

    
        $posts = get_posts( array(
                'numberposts' => 0,
    
                //'category'    => 10,
                'orderby'     => 'date',
                'order'       => 'ASC',
                'include'     => array(),
                'exclude'     => array(),
                'meta_key'    => '',
                'meta_value'  =>'',
                'post_type'   => 'goods',
                'suppress_filters' => true,
            ) );
    
            foreach( $posts as $post ){
                setup_postdata($post);
    
                the_title();
            }
            wp_reset_postdata();
    

    в таком раскладе выводятся все посты моего типа goods
    при попытке указать category или cat.. ничего не выводится..единствено что include если указывать то можно выводить отдельные посты..но это не вариант..постов много и они могут меняться..что то удалят..что то добавят..

    • Ответ изменён 4 месяца, 3 недели назад пользователем shiva2019.
    • Ответ изменён 4 месяца, 3 недели назад пользователем shiva2019.
    • Ответ изменён 4 месяца, 3 недели назад пользователем shiva2019.

    Но не очень понятно.

    Я вижу. Вы вообще не стой стороны заходите. Выборка первична, шаблон вторичен.

    По запрошенному адресу WP определяет, что именно надо выводить и делает выборку записей. Также WP ищет в Теме наиболее подходящий шаблон, который будет использовать для вывода. Если специфического шаблона нет, то используется наиболее общий — index.php.

    В шаблоне достаточно одного лишь Цикла WordPress, то есть, только вывода.

    Дополнительные get_posts() и его родственники в шаблоне могут использоваться для вывода чего-то дополнительного, например, похожих записей. Повторная выборка того, что уже выбрано при инициализации — зло.

    Если нужно что-то изменить в выборке, например, количество выводимых записей, желательно использовать хук pre_get_posts.

    Я знаю что выборка первична. Мне в приницпе и нужен был вариант кода который поможет решить этот вопрос.
    Только что нашел вариант решения:

    $posts = get_posts( [
    	'numberposts' => -1,
    	'post_type'   => 'goods',
    	'tax_query' => [
    		[
    			'taxonomy' => 'category_goods',
    			'field'    => 'term_id', // тут можно указать slug и ниже вписать ярлыки нужных рубрик
    			'terms'    => [ 103, 115, 206 ],
    		]
    	],
    	'orderby'     => 'date',
    	'order'       => 'ASC',
    ] );
    
    print_r($posts );
    

    С таким вариантом все получилось. Спасибо за помощь.

Просмотр 7 ответов — с 1 по 7 (всего 7)