2015-04-23 114 views
2

我有自定義帖子類型「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 DB表中,其中meta_key=operationmeta_value=1meta_value=2

任何人都可以幫助我。

+0

請注意,使用從$ _GET和$ _POST獲得的值而不消毒它們是很危險的。你可能想檢查:http://codex.wordpress.org/Validating_Sanitizing_and_Escaping_User_Data – Maxime

回答

0

多東西是你的代碼錯誤:

  1. 你不應該不消毒它們使用從用戶($_GET$_POST$_REQUEST)得到的值。您應該閱讀:Validating Sanitizing and Escaping User Data
  2. 您在功能soto_posts_filter_restrict_manage_posts中的選擇語句是無用的,因爲您無需執行任何操作。此外,您的<select>代碼表明只能使用一個值,爲什麼使用DISTINCT?另外,該聲明是否應該鏈接到帖子ID?

這當然是爲什麼你沒有得到你期待的結果。我建議您在這裏和那裏添加一些var_dump並驗證您的流程中的每個步驟,以確保您始終具有預期的結果。

相關問題