BuggyBuggy
@BuggyBuggy

Как в Wordpress вывести список страниц с дополнительным полем вместо названия страницы?

Надо вывести список страниц-городов. У каждой страницы есть поле Город, где есть нормальное название города. Но сами страницы называются типа "Сдать металлолом в Тагиле". Боги СЕО делали.
Есть страница "Московская область", в ней страницы с городами.
Если брать page-list, то он выводит заголовки вида "Сдать ...".
wp_list_page делает тоже самое.
Используя
[pagelist_ext child_of="699" depth="2" show_image="0" show_meta_key="town_name" show_title="0" show_content="0"]
,
получаю такое 5bd760df8a608190342367.jpeg.
Это максимально приближено к требуемому, но там нет ссылок, просто тексты с названиями городов.

UPD:
Встретил такое:
<?php 
// WP_Query arguments
$args = array(
  'post_type'              => array( 'page' ),
  'post_status'            => array( 'publish' ),
);

// The Query
$page_query = new WP_Query( $args );

// The Loop
if ( $page_query->have_posts() ) {
  while ( $page_query->have_posts() ) {
    $page_query->the_post();
?>

<div class='page-item' id="page-<?php the_ID(); ?>">
    <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
    <?php the_content(); ?>
</div>

<?php
  }
  the_posts_navigation();
} else {
 echo "<h2>Записей нет.</h2>";
}
// Restore original Post Data
wp_reset_postdata();
?>

Но как это всё вставить на страницу?
  • Вопрос задан
  • 450 просмотров
Решения вопроса 1
solidcreature
@solidcreature
Развиваю сообщество WordPress в Москве
Код представленный ниже нужно вставить в functions.php вашей темы. Это функция, которая добавляет шорткод [cities], который вы можете поставить там где нужно. У шорткода есть два атрибута parent, чтобы указать ID родительской страницы и key - чтобы можно было вывести не только town_name, но и любое другое поле

Вариант применения: [cities parent=123]

// Add Cities Shortcode
function cities_shortcode( $atts ) {

// Список возможных параметров шорткода: родительская страница и имя поля, значение которого нужно вывести
	$atts = shortcode_atts(
		array(
			'parent' => '',
			'key' => 'town_name'
		),
		$atts
	);

	// Задаем параметры WP_Query, чтобы получить список всех нужных страниц в одном объекте
	$args = array(
	  'post_type'              => array( 'page' ),
	  'post_status'            => array( 'publish' ),
	  'post_parent' => $atts[parent]	
	);

	//Объект WP_Query	
	$page_query = new WP_Query( $args );
	
	//Обертка для всех элементов, которые получатся, можно вставить свои классы
	$result_start = '<ul class="cities-list">';
	$result_end = '</ul>';
	
	//Цикл, выводим все города
  	while ( $page_query->have_posts() ):
    	$page_query->the_post();
		$post_id = get_the_ID(); //ID Страницы
		$city_name = get_post_meta( $post_id, $atts[key], true ); //Название города
		$result = $result  . '<li class="cities-item"><a href="' . get_the_permalink() . '">' . $city_name . '</a></li>'; //Название города, ссылка, + обертка из <li>
  	endwhile;		
	
	wp_reset_postdata();	
	
	return $result_start . $result . $result_end;
}

add_shortcode( 'cities', 'cities_shortcode' );
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Alex_18
@Alex_18
<?php
if ( have_posts() ) : // если имеются записи в блоге.
query_posts('cat=11&posts_per_page=1');   // указываем ID рубрик, которые необходимо вывести.
while (have_posts()) : the_post();  // запускаем цикл обхода материалов блога
the_title(); // заголовок поста в места него укажи поле Город. 
endwhile;  // завершаем цикл.
endif;
/* Сбрасываем настройки цикла. Если ниже по коду будет идти еще один цикл, чтобы не было сбоя. */
wp_reset_query();                
?>
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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