使用过滤器和“预设帖子”过滤“自定义帖子字段”的“自定义帖子类型”

时间:2017-01-31 01:23:36

标签: php wordpress wordpress-theming custom-post-type custom-fields

我创建了一个名为“公寓”的自定义发布时间。

我使用archive-apartment.php文件循环并以网格格式显示帖子。 对于循环,我使用“pre_get_posts”操作。

这是我在fuctions.php上的“pre_get_posts”操作

function post_query($query){
    if (!is_admin() && $query->is_main_query()){
        if(is_category()){
            $query->set('post_type', array( 'post', 'apartment' ) );
            $query -> set('posts_per_page', 3);
        }

        if( is_post_type_archive( 'apartment' )){


            $query -> set('posts_per_page', 8);
        }
    }
}
add_action('pre_get_posts', 'post_query');

这是我的category.php代码

<?php get_header(); ?>
     <div class="container">
     <?php
  $counter = 1; //start counter

  $grids = 3; //Grids per row


       if(have_posts()) : 
          while( have_posts()) : the_post();

  ?>
  <?php
  //Show the left hand side column
  if($counter == 1) :
  ?>
  <div class="row">
           <div class="col-md-4">
             <div class="center">
              <div class="postimage">
                 <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_custom_logo(); ?></a>
              </div>
                  <h2><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
                  <h4><?php the_category(' '); ?></h4>
                  <?php echo get_post_meta($post->ID, 'Price', true); ?>
           </div>
           </div>
  <?php

  elseif($counter == 2) :
  ?>
  <div class="col-md-4 border2">
     <div class="center">
              <div class="postimage">
                 <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_custom_logo(); ?></a>
              </div>
                  <h2><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
                  <h4><?php the_category(' '); ?></h4>
                  <?php echo get_post_meta($post->ID, 'Price', true); ?>
           </div>
           </div>

  <?php
  elseif($counter == $grids) :
  ?>
  <div class="col-md-4">
     <div class="center">
              <div class="postimage">
                 <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_custom_logo(); ?></a>
              </div>
                  <h2><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
                  <h4><?php the_category(' '); ?></h4>
                  <?php echo get_post_meta($post->ID, 'Price', true); ?>
           </div>
           </div>
  </div>
  <div class="clear"></div>
  <?php
  $counter = 0;
  endif;
  ?>

  <?php
  $counter++;
 endwhile;

  ?>

              <div class="row">

                  <div class="col-xs-12 text-left ">
                     <?php next_posts_link('<< Older post'); ?>
                  </div>
                  <div class="col-xs-12 text-right ">
                     <?php previous_posts_link('Newer post >>'); ?>
                  </div>

              </div>



  <?php
  endif;


  ?>

  </div>

  <?php get_footer(); ?>

现在我想添加过滤器,以便用户可以通过两个自定义字段对自定义后期类型“公寓”中的帖子进行排序:“价格”和“房间数量” 我创建了一个表单并指定了method = get

<form action="http://localhost/wordpress4/apartment" method="get">

            <label>Price:</label>
            <select name="Price">
                <option value="">Any</option>
                <option value="22000">22000</option>
                <option value="23000">23000</option>
                <option value="24000">24000</option>
                <option value="25000">25000</option>                
            </select>

            <label>Rooms:</label>
            <select name="Price">
                <option value="">Any</option>
                <option value="2">2</option>
                <option value="3">3</option>                         
            </select>

            <button type="submit" name="">search</button>
        </form>

然后我使用下面的代码来捕获GET值并将其存储在两个变量中,我将在循环中使用pre_get_posts过滤器:

<?php 

       if($_GET['Price'] && !empty($_GET['Price']))
        {
            $price = $_GET['Price'];
        }
        if($_GET['Rooms'] && !empty($_GET['Rooms']))
        {
            $rooms = $_GET['Rooms'];
        }

 ?>

现在我想知道如何更改功能post_query($ query) - “这是我使用pre_get_posts的功能” - 因此用户可以在自定义帖子类型url上过滤帖子:localhost / wordpress4 /公寓/.

此外,我希望用户在开始使用过滤器之前查看所有帖子(我的意思是他们第一次访问该页面时)。

谢谢

0 个答案:

没有答案