/ Wordpress / Вывод файлов по категориям записей

Вывод файлов по категориям записей

14.10.2022

442

Предположим что у нас заведены товары в виде записей и у товаров есть поле Техническое описание, и в этом поле указывается файл .pdf (само название файла). Все файлы при этом расположены в папке /wp-content/uploads/tds/ чтобы можно было их закидывать/заменять без медиабиблиотеки (без папок с датами и добавлением к названиям _1, _2 и т.д.). Так вот выведем все файлы (уникальные без повторений) по категориям по которым разделяются записи.

Запрос и функции

<?php $args = array(    
	'post_type' => 'post',  
	'numberposts' => -1,  
	'meta_key' => 'tds',
	'orderby' => 'title',  
	'order'   => 'ACS',
);

$postslist = get_posts( $args ); ?>  

<?php //Получаем массив всех значений TDS
foreach ($postslist as $post) { setup_postdata($post);
	
	$tds = get_post_meta($post->ID, 'tds', true);
	if (!empty($tds)) { $posts_with_tds[$post->ID] = $tds; }

}

//Уникальные значения TDS
$tds_uniq = array_unique($posts_with_tds);	

//Получаем категории записей
foreach ($tds_uniq as $post => $tds) { 

	$categories = get_the_category( $post );
	$cat_id = $categories[0]->term_id;
	
	$tds_cat[$tds] = $cat_id; // Индексы должны быть уникальными! Поэтому в индекс записываем название файла

}

asort($tds_cat); // Сортируем массив
	
// Выводим записи по категориям
$cat_id_zero = 0;
foreach ($tds_cat as $tds => $cat_id) { 

	if ( $cat_id != $cat_id_zero ){
		$category = get_category( $cat_id );
		if ( $cat_id_zero != 0 ){ echo '</div>'; } // если не первый массив
		echo '<h2>'.$category->name.'</h2>';
		echo '<div class="standard">';
		$cat_id_zero = $cat_id;
	}
	
	echo '<div class="link-container"><a href="/wp-content/uploads/tds/'.$tds.'" class="tds-link" target="_blank">
	<svg version="1.1" id="pdf" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="550.801px" height="550.801px" viewBox="0 0 550.801 550.801" style="enable-background:new 0 0 550.801 550.801;"
xml:space="preserve">
<g>
<path d="M160.381,282.225c0-14.832-10.299-23.684-28.474-23.684c-7.414,0-12.437,0.715-15.071,1.432V307.6
c3.114,0.707,6.942,0.949,12.192,0.949C148.419,308.549,160.381,298.74,160.381,282.225z"/>
<path d="M272.875,259.019c-8.145,0-13.397,0.717-16.519,1.435v105.523c3.116,0.729,8.142,0.729,12.69,0.729
c33.017,0.231,54.554-17.946,54.554-56.474C323.842,276.719,304.215,259.019,272.875,259.019z"/>
<path d="M488.426,197.019H475.2v-63.816c0-0.398-0.063-0.799-0.116-1.202c-0.021-2.534-0.827-5.023-2.562-6.995L366.325,3.694
c-0.032-0.031-0.063-0.042-0.085-0.076c-0.633-0.707-1.371-1.295-2.151-1.804c-0.231-0.155-0.464-0.285-0.706-0.419
c-0.676-0.369-1.393-0.675-2.131-0.896c-0.2-0.056-0.38-0.138-0.58-0.19C359.87,0.119,359.037,0,358.193,0H97.2
c-11.918,0-21.6,9.693-21.6,21.601v175.413H62.377c-17.049,0-30.873,13.818-30.873,30.873v160.545
c0,17.043,13.824,30.87,30.873,30.87h13.224V529.2c0,11.907,9.682,21.601,21.6,21.601h356.4c11.907,0,21.6-9.693,21.6-21.601
V419.302h13.226c17.044,0,30.871-13.827,30.871-30.87v-160.54C519.297,210.838,505.47,197.019,488.426,197.019z M97.2,21.605
h250.193v110.513c0,5.967,4.841,10.8,10.8,10.8h95.407v54.108H97.2V21.605z M362.359,309.023c0,30.876-11.243,52.165-26.82,65.333
c-16.971,14.117-42.82,20.814-74.396,20.814c-18.9,0-32.297-1.197-41.401-2.389V234.365c13.399-2.149,30.878-3.346,49.304-3.346
c30.612,0,50.478,5.508,66.039,17.226C351.828,260.69,362.359,280.547,362.359,309.023z M80.7,393.499V234.365
c11.241-1.904,27.042-3.346,49.296-3.346c22.491,0,38.527,4.308,49.291,12.928c10.292,8.131,17.215,21.534,17.215,37.328
c0,15.799-5.25,29.198-14.829,38.285c-12.442,11.728-30.865,16.996-52.407,16.996c-4.778,0-9.1-0.243-12.435-0.723v57.67H80.7
V393.499z M453.601,523.353H97.2V419.302h356.4V523.353z M484.898,262.127h-61.989v36.851h57.913v29.674h-57.913v64.848h-36.593
V232.216h98.582V262.127z"/>
</g>
</svg> '.$tds.'</a></div>';

}				
echo '</div>'; // для последнего массива

?>

Стили оформления кнопок для скачивания

a.tds-link {
    display: flex;
    align-items: center;
    border: 4px solid #f7f7f7;
    background: #000;
    background: linear-gradient(-45deg, #222 50%, #000 50%);
    border-radius: 10px;
    padding: 15px 30px;
    color: #fff;
    text-decoration: none;
}
	
a.tds-link:hover {
    border-color: #ffcc00;
}	
	
a.tds-link svg {
    width: 40px;
    height: 40px;
    fill: #f2b150;
    margin-right: 15px;
}

Поделиться в соц. сетях:

  • Комментарии
  • Вложения

Добавить комментарий

Пока нет комментариев. Будь первым!

Вывод файлов по категориям записей Вывод файлов по категориям записей
Datetimepicker
Рекомендации для васDatetimepickerOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.