自定义过滤器功能不适用于自定义帖子类型

时间:2015-04-23 20:27:31

标签: php wordpress filter custom-post-type

我有自定义帖子类型“soto_property”。我已经根据使用的名为“operations”的元数据制作了一个自定义过滤器来过滤帖子列表。这是我的代码 -

<?php
add_filter( 'parse_query', 'soto_posts_filter' );
add_action( 'restrict_manage_posts', 'soto_posts_filter_restrict_manage_posts' );

function soto_posts_filter( $query )
{
    global $pagenow;
    if( is_admin() AND $query->query['post_type'] == 'soto_property' ) {
        $qv = &$query->query_vars;
        $qv['meta_query'] = array();

        if( !empty( $_GET['operations'] ) ) {
          $qv['meta_query'][] = array(
            'field' => 'operations',
            'value' => $_GET['operations'],
            'compare' => 'LIKE',
          );
        }

    }
}

function soto_posts_filter_restrict_manage_posts()
{
    global $wpdb;
    if($_GET['post_type']=='soto_property')
    {
        $sql = 'SELECT DISTINCT meta_key FROM '.$wpdb->postmeta.' where meta_key="operations" ORDER BY 1';
        $fields = $wpdb->get_results($sql, ARRAY_N);

 ?>
<select name="operations" id="filter-operations" class="custom-filter" style="display:none; width: 15%;" >
        <option value=""></option>
        <option value="2" <?php echo $_GET['operations']==2?"selected='selected'":'' ?>>Rent</option>
        <option value="1" <?php echo $_GET['operations']==1?"selected='selected'":'' ?>>Sale</option>
      </select>
<?php
    }
}

但是我的帖子没有根据元数据“操作”进行过滤。 此元数据存储在wp_postmeta数据库中meta_key=operationmeta_value=1meta_value=2

任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

您的代码存在多处问题:

  1. 您绝不应使用从用户($_GET$_POST$_REQUEST)获得的值,而不必对其进行清理。你应该读这个:Validating Sanitizing and Escaping User Data
  2. 函数soto_posts_filter_restrict_manage_posts中的Select语句没用,因为您没有对它执行任何操作。另外,您的<select>代码表明只能使用一个值,那么为什么要使用DISTINCT?此外,不应该将该语句链接到帖子ID吗?
  3. 这肯定是为什么你没有得到你期望的结果。我建议您在此处添加一些var_dump并验证流程中的每个步骤,以确保您始终获得预期的结果。