@Andrey_Mirov

Как объеденить записи по произвольному полю?

Всем привет. Хочу на странице получить такую структуру:

Комедия
Название 1, Название 2, Название 3
Трагедия
Название 1, Название 4, Название5
Документалка
Название 2, Название 4, Название5

и тд.
Комедия, Трагедия и Документалка - это произвольные поля записей
Сделать их рубриками я не могу, так как рубрики будут по верстке выводится по - другому.
Нужно именно Произвольными полями выводить.

Мой код

<?php
class Cinema_Walker_Category extends Walker_Category {
	
   function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
		$name = $category->name;
		$category_id = $category->term_id;
		$count = $category->count;
		$output .= $name;
		$myPosts = get_posts(array(
			'category'  => $category->term_id,
			'order' => 'ASC',
			'orderby' => 'meta_value',
			'meta_query' => array(
								array( 
									'key' => 'cinema'
								)
							)			
 		));

			foreach($myPosts as $newPosts){
				$newText = $newPosts->post_title;
				$post_id = $newPosts->ID;
				$permalink = get_permalink($post_id);
				$thumb = get_the_post_thumbnail_url( $post_id, 'medium' );
				$meta_values = get_post_meta( $post_id, 'cinema', true );
				$string = '';

				switch ($meta_values){
					case 0:
						$string = 'драма';
						break;
					case 1:
						$string = 'комедия';
						break;
					case 2:
						$string = 'трагедия'; 
						break;
					case 3:
						$string = 'документалка';
						break;
				};
		
				$output .= '<span class="floor-category__floor-name">'.$string.'</span><span>'.$newText.'</span>';
							
			}			


	}
}
?>


На выходе получается так:

Комедия
Название 1,
Комедия
Название 2,
Комедия
Название 3

и тд.
Это я так понимаю, потому что я в цикле. Как мне объеденить записи по произвольному полю - cinema?
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
@MrTimon
Ну я вижу несколько способов. Один из них это сортировать выборку по полю cinema тогда сначала будут идти одни драмы, потом коммедии и т. д. Ну и тогда в фориче где формируется $output формировать необходимый вывод. Тоисть сначала выводим названия жанра, потом название фильмов. И вследующий раз выводить название жанра только если оно изменилось. Думаю это будет наиболе безболезненый вариант.
Запрос меняешь на следующий:
$myPosts = get_posts(array(
      'category'  => $category->term_id,
      'order' => 'ASC',
      'orderby' => 'meta_value',
      'meta_key' => 'cinema',
      'meta_query' => array(
                array( 
                  'key' => 'cinema'
                )
              )			
 		));

Добавил только 'meta_key' => 'cinema', Хотя ты ключ указадл в meta_query только я не уверен что оно так работает.

Ну при формировани $output:
$prev_value = -1;
    if ($meta_values !=  $prev_value )  {
        $prev_value = $meta_values;
         $output = rtrim($output,', '); // Удалям последнюю запятую
         $output .= '<br><span class="floor-category__floor-name">'.$string.'</span><br>'
    }
    $output .= '<span>'.$newText.'</span>, '


Как то так, должно работать +/-
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
NetSky
@NetSky
Nix-админ, Разработчик Bitrix, Drupal и Wordpress
Произвольное поле .. оно как бы для другого предназначенно

но а вывод .. раньше это решалось так

SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->;term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.term_id = 1,2,3
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->postmeta.meta_key = 'paragraf'
ORDER BY $wpdb->postmeta.meta_value ASC


в новой версии не знаю
Ответ написан
@Andrey_Mirov Автор вопроса
Проблема в том, что мне нельзя выходить из цикла foreach(
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы