Как отфильтровать новый запрос WP по значению настраиваемого поля?

Я создаю новые страницы для каждой из моих категорий в wordpress. В редакторе сообщений есть настраиваемое поле, которое позволяет выбрать тип сектора, это применяется к сообщению при обновлении. Настраиваемое поле key: sector, для опций метаданных настраиваемого поля value можно использовать SectorA, SectorB и SectorC. Я использую пользовательский тип сообщений под названием projects.

Я последовал совету по этой ссылке http://weblogtoolscollection.com/archives/2008/04/13/how-to-only-retrieve-posts-with-custom-fields/

Как я могу изменить строку запроса в приведенном ниже коде, чтобы она фильтровала цикл по имени сектора, давайте использовать SectorA. Затем я буду повторно использовать код на каждой странице шаблона, изменив значение на SectorB и SectorC на других страницах.

Я думаю, что это нужно как-то изменить:

$customPosts->query('showposts=5&sector=sectorA&post_type=projects' );

В настоящее время он успешно повторяет sector value и description value, но показывает все сообщения. Итак, моя попытка ограничить его сектором A с использованием sector=sectorA, похоже, не работает?

Этот код находится в functions.php:

function get_custom_field_posts_join($join) {
global $wpdb, $customFields;
return $join . "  JOIN $wpdb->postmeta postmeta ON (postmeta.post_id = $wpdb->posts.ID and postmeta.meta_key in ($customFields)) ";
}
function get_custom_field_posts_group($group) {
global $wpdb;
$group .= " $wpdb->posts.ID ";
return $group;
}

И этот код находится на странице шаблона:

<?php /* Begin Custom Field Posts */ ?>
<h2>Custom Posts</h2>
<ul>
<?php 
global $customFields;
$customFields = "'sector', 'description'";
$customPosts = new WP_Query();
add_filter('posts_join', 'get_custom_field_posts_join');
add_filter('posts_groupby', 'get_custom_field_posts_group');
$customPosts->query('showposts=5&sector=sectorA&post_type=projects' );//Uses same parameters as query_posts
remove_filter('posts_join', 'get_custom_field_posts_join');
remove_filter('posts_groupby', 'get_custom_field_posts_group');

while ($customPosts->have_posts()) : $customPosts->the_post(); 
$sector = get_post_custom_values("sector"); 
$description=  get_post_custom_values("description");?>
<li><?php echo $sector[0]; ?></li>
<li><?php echo $description[0]; ?></li><br />
<?php endwhile; ?>
</ul>
<?php /* End Custom Field Posts */ ?>

Спасибо за вашу помощь


person M.F    schedule 03.03.2013    source источник


Ответы (2)


Может быть, это то, что вы хотите

function get_custom_field_posts_join($join) {
global $wpdb, $customSector;
return $join . "  JOIN $wpdb->postmeta postmeta ON (postmeta.post_id = $wpdb->posts.ID and postmeta.meta_key = 'sector' and postmeta.value = '$customSector') ";
}

и модификация страницы

$customSector='sectorA';//<--- insert this
add_filter('posts_join', 'get_custom_field_posts_join');
person shibormot    schedule 03.03.2013
comment
Спасибо за вашу помощь, я пробовал это, но это не работает для меня. Теперь отображается только заголовок, сообщения ниже не отображаются. - person M.F; 03.03.2013

Попробуйте использовать этот код.

<?php
$sector = get_post_meta($post->ID, "sector", false);
if ($sector[0]=="") { ?>

<!-- If there are no custom fields, show nothing -->

<?php } else { ?>

<div class="sector">
    <h3>Title</h3>

    <?php foreach($sector as $sector) {
    echo '<blockquote><p>'.$sector.'</p></blockquote>';
    } ?>

</div>

<?php } ?>
person 5wpthemes    schedule 21.04.2013