надеясь, что кто-то здесь может помочь noob.
В идеале я хотел бы получить заметку из категории «Featured Club», чтобы отобразить выше трех сообщений из одного и того же настраиваемого типа сообщений. У меня есть следующие рабочие, но для одного я использую две петли, где я уверен, что один будет работать, а два – результаты в полноразмерной записи, отображаемые в столбце, и мне нужны они в строке.
Кроме того, у меня есть другой пользовательский тип сообщения, который я хотел бы отображать на той же странице в этом блоке, с другой «Featured Category», и тем, как я собираюсь, у меня будет четыре петли.
Посмотрите вперед, чтобы получить некоторую помощь.
Вот код:
<h2 class="home-title">Jazz Clubs</h2> <?php $args = array ( 'post_type' => 'jazz clubs', 'meta_query' => array( array( 'key' => '_jazz_club_feature_club', ), ), ); // The Query $jazzclubs = new WP_Query( $args ); // The Loop if ( $jazzclubs->have_posts() ) { while ( $jazzclubs->have_posts() ) { $jazzclubs->the_post(); ?> <h3><?php the_title() ?></h3> <?php the_post_thumbnail() ?> <div class='post-content'><?php the_excerpt() ?></div> <?php } } else { // no posts found } wp_reset_postdata(); ?> </div> </div> <div class="row"> <div class="small-12 large-4 columns" id="home-club"> <?php // WP_Query arguments $args = array ( 'post_type' => 'jazz clubs', 'orderby' => 'date', ); // The Query $jazzclubs = new WP_Query( $args ); // The Loop if ( $jazzclubs->have_posts() ) { while ( $jazzclubs->have_posts() ) { $jazzclubs->the_post(); ?> <div id="homeclub"> <div class="homethumb"> <?php the_post_thumbnail() ?> <h5 id="city"class="h5"><span><?php $terms = get_the_terms( $post->ID , 'city' ); if ( $terms != null ){ foreach( $terms as $term ) { print $term->name ; unset($term); } } ?></span></h5> </div> <h4 id="home"class="h4"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <h6 id="home"class="h6"><?php the_date('F j Y'); ?></h6> <div class='post-content'><?php the_excerpt() ?></div> </div> <?php } } else { // no posts found } // Restore original Post Data wp_reset_postdata(); ?> </div>
… для одного я использую две петли, где я уверен, что один будет работать …
Я не думаю, что один запрос будет легко сделать здесь. Также может быть сложно поддерживать код, если все было сделано в одном запросе базы данных. Пять запросов (4, которые вы запускаете, плюс основной запрос WordPress работает) много, но кеширование может помочь уменьшить среднее число запросов, запущенных на просмотр страницы.
… и два, результаты под полной шириной, опубликованные в столбце, отображаются в столбце, и мне нужны они в строке.
Это можно исправить с помощью CSS. Поиск в Google для горизонтальных списков для CSS-примеров делает это со списками ( <ul>
и <ol>
). Довольно легко адаптировать аналогичный стиль к div.
В коде есть еще кое-что.
Во-первых, похоже, что в городской таксономии будет только один город, и тестирование результата get_the_terms()
для null
– это не достаточно хороший тест. get_the_terms()
может возвращать объект WP_Error .
$terms = get_the_terms( $post->ID , 'city' ); if ( $terms != null ) { foreach( $terms as $term ) { print $term->name ; unset($term); } }
с$terms = get_the_terms( $post->ID , 'city' ); if ( $terms != null ) { foreach( $terms as $term ) { print $term->name ; unset($term); } }
Вот пользовательская функция, которая перекликает город (или пустую строку) с браузером для текущего сообщения. Разместите это определение функции в нижней части файла.
function wpse_117541_the_post_city() { global $post; $terms = get_the_terms( $post->ID , 'city' ); if ( $terms && ! is_wp_error( $terms ) ) echo $terms[0]->name; echo ''; }
Примечание. Я не полностью тестировал эту функцию.
В коде вы можете использовать его так:
<h5 id="city" class="h5"><span><?php wpse_117541_the_post_city(); ?></span></h5>
Во-вторых, каждый атрибут id
HTML должен быть уникальным. Он не может появляться на веб-странице более одного раза.
В вашем коде этот HTML-код появляется в цикле строк:
<div id="homeclub"> <div class="homethumb"> <?php the_post_thumbnail() ?> <h5 id="city" class="h5"><span><?php wpse_117541_the_post_city(); ?></span></h5> </div> <h4 id="home" class="h4"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <h6 id="home" class="h6"><?php the_date( 'F j Y' ); ?></h6> <div class='post-content'><?php the_excerpt() ?></div> </div>
Если есть 1 строка из 4 столбцов, будет 4 homeclub
и 8 home
id
. Использование имени класса, которое совпадает с именем элемента, не дает вам большой пользы. В CSS элементы h4
можно стилизовать, используя селектор h4
. Добавление class
HTML с тем же именем позволяет использовать .h4
в качестве селектора.
Вместо этого вы можете использовать это:
<div class="home-club"> <div class="thumb"> <?php the_post_thumbnail() ?> <h5 class="city"><span><?php wpse_117541_the_post_city(); ?></span></h5> </div> <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4> <h6><?php the_date( 'F j Y' ); ?></h6> <div class='post-content'><?php the_excerpt() ?></div> </div>
В таблице стилей используйте эти селектора CSS для стилизации каждой части:
.home-club {} .home-club thumb {} .home-club h5 {} or .home-club .city {} .home-club h4 {} .home-club h6 {} .home-club post-content {}
{}
будет содержать стили для этой части HTML, если таковые имеются. Я использовал home-club
потому что предпочитаю разделять слова в именах классов с тире.
В-третьих, вам нужно будет только wp_reset_postdata()
после завершения всех ваших пользовательских циклов. Это означает сброс данных сообщения (которые были сбиты с каждым вызовом the_post()
) для запроса, который WordPress использовал для the_post()
к этой странице.
Вы сбросите данные, чтобы другой код, например код виджетов, видел данные основного запроса, который ожидается, а не данные ваших пользовательских запросов, которые не ожидаются. Вероятно, это не помешает назвать это несколько раз, но это не нужно.