vorst.ru - Пример плагина для WordPress для агентства недвижимости
Статьи из рубрики data-structure

Как создать индекс ElasticSearch

Полнотекстовый поиск

Один парень написал: "Нужно сделать поиск слов в таблице "articles" по столбцу "content". В результатах поиска сначала выводить те, которые содержат наибольшее количество слов в статье и далее по мере уменьшения."

Мысль летит) Но ясно, что нужен полнотекстовый поиск.


WordPress плагин для недвижимости

Без изменения структуры данных

Привлекательность WordPress в большом количестве тем оформления. Иллюзия легкости, с которой можно поменять тему, не дает покоя разработчикам. Сейчас на WordPress работают даже магазины.

Чтобы разобраться, как это возможно, я решил написать плагин для агенств недвижимости. Расширять структуру данных не хотелось - это уже будет не WordPress. Решил сохранять JSON-определения объектов недвижимости в поле post_content и преобразовывать эти определения "на лету" - Demo, GitHub


Как устроена структура данных Nested Set

Как сделать рубрикатор

Рубрикатор, как средство поиска интересных статей, имеет свои недостатки - трудно придумать иерархию, названия рубрик, трудно потом решить к какой конкретно рубрике относится статья. "Но, так принято" - скажите вы и будете правы.


Цепочки статей в блоге

Можно ли сделать блог удобнее?

Для группировки статей существует возможность помечать статьи метками или прикреплять к наперед заданной рубрике. Кроме того, в конце статьи есть навигация - предыдущая, следующая статья, ну и меню конечно. Вроде все удобно.



Поиск



WordPress плагин для недвижимости

Без изменения структуры данных

Привлекательность WordPress в большом количестве тем оформления. Иллюзия легкости, с которой можно поменять тему, не дает покоя разработчикам. Сейчас на WordPress работают даже магазины.

Чтобы разобраться, как это возможно, я решил написать плагин для агенств недвижимости. Расширять структуру данных не хотелось - это уже будет не WordPress. Решил сохранять JSON-определения объектов недвижимости в поле post_content и преобразовывать эти определения "на лету" - Demo, GitHub


    Поделиться

Выглядит подобное определение следующим образом

[metaslider id=27]{
what:"flat",
deal:"0sell",
type:"2hand",
country:"Russia",
state:"Tatarstan",
city:"Kazan",
district:"Novo-Savinovsky",
locality:"",
street:"Воровского, 23",
lng:"49.077515",
lat:"55.840513",
rooms:1,
total:31,
living:19,
kitchen:6,
lot:0,
project:"hru",
material:"panel",
floor:2,
floors:5,
price:2370000,
phone:1231345,
email:"example@gmail.сom",
description:"EXAMPLE! Center of the life.! All in step availability."
}

Это определение легко можно преобразовать в стандартное JSON-определение и далее в модель. Далее, уже список моделей, можно проверять на соответствие критериям поиска и выводить на экран. Те, что подходят.

public function criteria( $query ) {
    global $wpdb;
    if ( $query->is_home() && $query->is_main_query() ) {
        $q = "SELECT ID, post_content, post_title FROM $wpdb->posts " . 
            "WHERE post_status = 'publish' AND post_type = 'post'"; 
        $ads = $wpdb->get_results( $q ); 
        // fill in $models
        $models = [];
        foreach ($ads as $ad) {  
            if ( $this->is_definition($ad->post_content) ) {
                $model = $this->convert( $ad->post_content );
                $model->title = $ad->post_title;
                $model->shortcode = $this->get_shortcode( $ad->post_content );
                $models[$ad->ID] = $model;
            }  
        }
        $this->setParams();
        $this->points = [];
        // no ID with 0, so it's mean nothing found 
        $ids = [0];
        // choce models by criteria
        foreach ( $models as $id => $model ) {
            if($this->condition($model)) {
                $ids[] = $id;
                if(self::GEOCODER)
                    $this->setPoint($model);
            }
        }
        // set new query
        $query->set( 'post__in', $ids );
    }
}

Вызов метода происходит по событию pre_get_posts то есть перед тем, как будут загружены посты. Чтобы вызов состоялся, нужно повесить крюк при старте плагина.

add_action( 'pre_get_posts', [ $this, 'criteria' ] );

Такова идея. Как это работает, можно посмотреть на Demo сайте. Здесь можно почитать рекламный спич. А на GitHub почитать, как можно настроить плагин под себя.

Заключение

Плагин для агенств недвижимости работает из коробки. Тем не менее он может меняться под нужды приложения.

Оставьте комментарий

Только зарегистрированные пользователи могут оставлять комментарии. Пожалуйста войдите или пройдите регистрацию.