Как отображать поездки в зависимости от свойств и типов комнат - PullRequest
0 голосов
/ 17 января 2020

У меня есть пользовательский тип сообщения trips, properties, room-types и features. Я назначил свойства для поездок, а свойства имеют свои особенности и типы комнат. Теперь мне нужен фильтр на странице архива поездок, который отображает поездки в соответствии с характеристиками свойств, а также с типами комнат.

Выбранные объекты и типы комнат сохраняются в properties_post_meta_data. В настоящее время, когда выбраны объекты свойств и типы комнат, тогда он отфильтровывает поездки, но возникают проблемы, когда выбирается один объект, т. Е. Объекты или типы комнат.

Мой текущий код для фильтрации:

$relation = empty($property_feature_id) ? 'OR' : (empty($room_types_id) ? 'OR' : "AND");
                        $args = [
                            'post_type' => 'properties',
                            'meta_query' => [],
                        ];

                        if(!empty( $property_feature_id ) && !empty( $room_types_id ) ){
                            $args['meta_query']['relation'] = $relation;
                        }
                        if( !empty( $property_feature_id ) && empty( $room_types_id ) ) {
                            $args['meta_query'][] = array(
                                'key'     => 'properties_post_meta_data',
                                'value'   => $property_feature_id,
                                'compare' => 'LIKE',
                            );
                        }
                        if( !empty( $room_types_id ) && empty( $property_feature_id ) ) {
                            $args['meta_query'][] = array(
                                'key'     => 'properties_post_meta_data',
                                'value'   => $room_types_id,
                                'compare' => 'LIKE',
                            );
                        }

                        $properties_data = get_posts( $args );
                        $look_for_properties = [];
                        foreach ($properties_data as $property) {
                            $metas    = get_post_meta( $property->ID, 'properties_post_meta_data', true );
                            $features = isset( $metas['property_features'] ) ? $metas['property_features'] : [];
                            $room_types = isset( $metas['roomtypes_select'] ) ? $metas['roomtypes_select'] : [];
                            if ( in_array( $property_feature_id, $features ) ) {
                                $look_for_properties[] = $property->ID;
                            }
                            if ( in_array( $room_types_id, $room_types ) ) {
                                $look_for_properties[] = $property->ID;
                            }
                        }
                        wp_reset_postdata();
                        $meta_query_args = [];
                        if ( empty( $look_for_properties ) ) {
                            $meta_query_args[] = [
                                'key'     => 'not_exist_meta',
                                'value'   => '',
                                'compare' => '=',
                            ];
                        } else {
                            $value = implode( ',', $look_for_properties );
                            foreach ( $look_for_properties as $vproperty ) {
                                $meta_query_args['relation'] = 'OR';
                                $meta_query_args[] = [
                                    'key'     => 'wp_trip_properties',
                                    'value'   => $vproperty,
                                    'compare' => 'LIKE',
                                ];
                            }
                        }
                        $query->set( 'meta_key', 'wp_trip_properties' );
                        $query->set( 'meta_query', array([
                            array(
                                $meta_query_args,
                            )
                        ]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...