按自定义字段列出的FaceWP组列表

时间:2018-03-15 作者:KreigD

我正在一个使用FacetWP作为事件位置页面的网站上工作,但有一个关键功能不起作用。去年,另一个开发人员建立了一个自定义解决方案,列出FacetWP帖子,并按照它们所处的状态对它们进行排序。他们为此使用了自定义分类法,但从那时起,插件和is地图加载项的更新打破了该解决方案。

FacetWP背后的开发人员一直在帮助我修改自定义解决方案,但他现在不在,我仍然需要一些帮助。他指示我重做查询,以删除自定义分类法,并使用自定义字段代替状态名称,因为这样可以更好地与插件配合使用。因此,此模板的查询如下所示:

<?php
return array(
  \'post_type\' => \'location\',
  \'post_status\' => \'publish\',
  \'posts_per_page\' => -1,
  \'order\' => \'ASC\',
  \'meta_key\' => \'state\',
  \'orderby\' => array(
    \'meta_value\' => \'ASC\',
    \'title\' => \'ASC\',
  ),
);
这部分工作得很好,解决了我之前遇到的一个问题。我重建了模板的显示代码,如下所示:

<?php
while ($query->have_posts()) {
    $state = get_field(\'state\');
    $show_header = (empty($prev_state) || $state != $prev_state);
    $prev_state = $state;

    $query->the_post();
    $post_id = get_the_ID();
    $title = get_the_title($post_id);
    $distance = facetwp_get_distance($post_id);
    $distance = (false !== $distance) ? round($distance, 1) . \' miles away\' : \'\';
    $coords = get_post_meta($post_id, \'location\', true);
    $content = get_the_content();
    ?>
  <?php if ($show_header): ?>
  <h1 class="state-name"><?php echo esc_html($state); ?></h1>
  <?php endif;?>

  <div class="post-item" data-title="<?php echo esc_attr($title); ?>"
      data-latitude="<?php echo $coords[\'lat\']; ?>" data-longitude="<?php echo $coords[\'lng\']; ?>"
      data-distance="<?php echo $distance; ?>">
    <div class="post-item-content">
      <h2><?php echo $title; ?></h2>
      <?php echo $content; ?>
    </div>
  </div>
  <?php
}

    wp_reset_query();
?>
你可以从中看到the staging server where I\'m testing this 它几乎可以工作,但不是百分之百正确。帖子没有按州正确列出,列表上方的州标题不正确。

这是漫长的一天,我的大脑只是看不到我需要做什么来纠正这个问题。我完全可以朝着正确的方向轻推。

2 个回复
最合适的回答,由SO网友:KreigD 整理而成

我最终修复了它:

<?php

    $state_posts = array();

    while ($query->have_posts()) {
        $query->the_post();
        $state = get_post_meta(get_the_ID(), \'state\', true);
        $state_posts[$state][] = $post;
    }

    wp_reset_query();

    foreach ($state_posts as $state_post => $state_title) {
?>
  <h1 class="state-name"><?php echo esc_html($state_post); ?></h1>
<?php
  foreach ($state_title as $listing => $single_listing) {
    setup_postdata($single_listing);
    $post_id = $single_listing->ID;
    $title = get_the_title($post_id);
    $distance = facetwp_get_distance($post_id);
    $distance = (false !== $distance) ? round($distance, 1) . \' miles away\' : \'\';
    $coords = get_post_meta($post_id, \'location\', true);
    $content = get_the_content();
?>
  <div class="post-item" data-title="<?php echo esc_attr($title); ?>" data-latitude="<?php echo $coords[\'lat\']; ?>" data-longitude="<?php echo $coords[\'lng\']; ?>" data-distance="<?php echo $distance; ?>">
    <div class="post-item-content">
      <h2><?php echo $title; ?></h2>
      <?php echo $content; ?>
    </div>
  </div>
<?php
  }
  wp_reset_postdata();
}
我的帖子数据如下the_title, the_content, 在while 在我最后一次需要时循环foreach 循环,以便仅将这些应用于各个帖子。

SO网友:digDoug

您只需在几个foreach循环中列出自定义字段值,如下所示:

<?php

while ($query->have_posts()) {
    $query->the_post();
    $posts = $query->have_posts();
    $post_id = get_the_ID();
    $title = get_the_title($post_id);
    $distance = facetwp_get_distance($post_id);
    $distance = (false !== $distance) ? round($distance, 1) . \' miles away\' : \'\';
    $coords = get_post_meta($post_id, \'location\', true);
    $content = get_the_content();

    foreach ($posts as $post) {
      $state = get_field(\'state\');
      $state_posts[$state][] = $post;
    }
}

foreach ($state_posts as $state_post => $state_title) {
  ?>
  <h1 class="state-name"><?php echo esc_html($state); ?></h1>
  <?php
  foreach ($state_title as $listing) {
    ?>
    <div class="post-item" data-title="<?php echo esc_attr($title); ?>"
      data-latitude="<?php echo $coords[\'lat\']; ?>" data-longitude="<?php echo $coords[\'lng\']; ?>" data-distance="<?php echo $distance; ?>">
      <div class="post-item-content">
        <h2><?php echo $title; ?></h2>
        <?php echo $content; ?>
      </div>
    </div>
    <?php
  }
}

结束