Сергей

Расширенный поиск по Custom Fields

Помогите пожалуйста, нужно создать расширенный поиск, по произвольным полям.
Установлен WordPress 3. Поиск нужен по отдельному Custom Post Types.
К каждой создаваемой записи присваивается около 20 произвольных полей "country", "city", "index" и т.п. Нужно сделать по всему этому хозяйству расширенный поиск, т.е. каждое произвольное поле мы должны запрашивать из его input`a. Сейчас есть код, который частично решает задачу, из одного поля формы можно искать по любым произвольным полям. Вот этот код:

<?php

/*
Plugin Name: Search Custom Fields new
Plugin URI: http://guff.szub.net/search-custom-fields/
Description: Search post custom field values. Also provides for an alternative theme 'search' template: search-custom.php.
Author: Kaf Oseo
Version: 12
Author URI: http://szub.net

    Copyright (c) 2006 Kaf Oseo (http://szub.net)
    Search Custom Fields is released under the GNU General Public License
    (GPL) http://www.gnu.org/licenses/gpl.txt

    This is a WordPress 2 plugin (http://wordpress.org).
*/

function custom_search_join($join) {
    if ( is_search() && isset($_GET['s'])) {
        global $wpdb;

       $join = " LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id ";
    }
    return($join);
}
add_filter('posts_join', 'custom_search_join');

function custom_search_groupby($groupby) {
    if ( is_search() && isset($_GET['s'])) {
        global $wpdb;
        $groupby = " $wpdb->posts.ID ";
    }
    return($groupby);
}
add_filter('posts_groupby', 'custom_search_groupby');

function custom_search_where($where) {
    $old_where = $where;
    if (is_search() && isset($_GET['s'])) {
        global $wpdb;
        $customs = Array('number', 'creditor', 'index', 'country', 'adress', 'uch', 'other', 'rek', 'osn', 'nprot', 'yur', 'date', 'inn', 'city');
        $query = '';
        $var_q = stripslashes($_GET['s']);
        if ($_GET['sentence']) {
            $search_terms = array($var_q);
        }
        else {
            preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $var_q, $matches);
            $search_terms = array_map(create_function('$a', 'return trim($a, "\\"\'\\n\\r ");'), $matches[0]);
        }
        $n = ($_GET['exact']) ? '' : '%';
        $searchand = '';
        foreach((array)$search_terms as $term) {
            $term = addslashes_gpc($term);
            $query .= "{$searchand}(";
                        $query .= "($wpdb->postmeta.meta_key LIKE '{$n}{$term}{$n}')";
            $query .= " OR ($wpdb->postmeta.meta_value LIKE '{$n}{$term}{$n}')";
            foreach($customs as $custom) {
                $query .= " OR (";
                $query .= "($wpdb->postmeta.meta_key = '$custom')";
                $query .= " AND ($wpdb->postmeta.meta_value  LIKE '{$n}{$term}{$n}')";
                $query .= ")";
            }
            $query .= ")";
            $searchand = ' AND ';
        }
        $term = $wpdb->escape($var_q);
        if (!$_GET['sentense'] && Count($search_terms) > 1 && $search_terms[0] != $var_q) {
            $search .= " OR ($wpdb->postmeta.meta_key LIKE '{$n}{$term}{$n}')";
            $search .= " OR ($wpdb->postmeta.meta_value LIKE '{$n}{$term}{$n}')";
        }

        if (!empty($query)) {
            $where = " AND ({$query}) AND ($wpdb->posts.post_status = 'publish') ";
        }
    }

    return($where);
}
add_filter('posts_where', 'custom_search_where');
?>

Т.е. в запросе http://example.com/?s=Россия Москва будут отображены записи которые содержат в произвольном полю "country" – Россия, а в поле "city" – Москва. Мне нужно чтобы запросы можно было делать так http://example.com/?country=россия&city=москва причем, например по "Росс" и "Моск" тоже должны быть релевантные результаты.

Список rss-лент для каждой категории

Хочу сделать список rss лент для каждой категории и вывести это на отдельной странице, сделал шаблон вывода всех категорий с кол-вом новостей через код:

<?php wp_list_categories('title_li=&sort_column=name&show_count=1&show_last_updated=1&use_desc_for_title=1&exclude=' .$catid.'') ?>

При клике на ссылку должны выводиться не записи категории, а ее rss-лента, код вывода ссылки на rss для категории есть:

<?php  $cat_obj = $wp_query->get_queried_object(); $cat_id = $cat_obj->cat_ID; echo '<a href="'; get_category_rss_link(true, $cat, '' ); echo '">RSS лента для категории</a>';  ?>

только вот как связать эти два кода не знаю 🙁

Anonymous
Отправить
Ответ на: