Плохо ли возвращать сгенерированный HTML-файл в functions.php вместо JSON? - PullRequest
0 голосов
/ 12 июня 2018

Я создал пост-фильтр с пользовательской крошкой, используя AJAX.Так что теперь из файла functions.php возвращается немало HTML.Кто-то сказал мне, что я не должен делать это, но они не сказали мне, почему.


Вопросы

  1. Помимо того, что мои функции.php выглядят грязно, есть ли другие недостатки в том, что я сделал?
  2. Будет ли это считаться плохимпрактика?
  3. Может ли это замедлить работу сайта?

functions.php page

add_action('wp_ajax_soldfilter', 'sold_filter');
add_action('wp_ajax_nopriv_soldfilter', 'sold_filter');

function sold_filter(){
    $posts = array(
        'posts_per_page'    =>  -1,
        'post_type'         =>  'property',
        'orderby'           =>  'date',
        'meta_key'          => 'property_status',
        'meta_value'        => 'Sold'
    );

    $posts['meta_query'] = array( 'relation' => 'AND' );
    // price filtering

    if($_POST['min_price'] && !empty($_POST['min_price'])){
        $min_price = $_POST['min_price'];
    }else{
        $min_price = 0;
    }

    if($_POST['max_price'] && !empty($_POST['max_price'])){
        $max_price = $_POST['max_price'];
    }else{
        $max_price = 10000000;
    }

    $posts['meta_query'][] = array(
        'key'       => 'property_price',
        'type'      => 'NUMERIC',
        'value'     => array($min_price, $max_price),
        'compare'   => 'BETWEEN'
    );

    // bed filtering

    if($_POST['min_beds'] && !empty($_POST['min_beds'])){
        $min_beds = $_POST['min_beds'];
    }else{
        $min_beds = '1'; 
    }

    if($_POST['max_beds'] && !empty($_POST['max_beds'])){
        $max_beds = $_POST['max_beds'];
    }else{
        $max_beds = '9+'; 
    }

    $posts['meta_query'][] = array(
        'key'       => 'bedrooms',
        'value'     => array($min_beds, $max_beds),
        'compare'   => 'BETWEEN'
    );

    //location filtering

    if(isset( $_POST['location'] ) && $_POST['location']){
        $location = $_POST['location'];
        $location_val = stripslashes($location);

        $posts['meta_query'][] = array(
            'relation'  => 'OR',
            array(
                'key'       => 'street',
                'value'     => $location_val,
                'compare'   => 'LIKE'
            ),

            array(
                'key'       => 'town',
                'value'     => $location_val,
                'compare'   => 'LIKE'
            ),

            array(
                'key'       => 'county',
                'value'     => $location_val,
                'compare'   => 'LIKE'
            ),

            array(
                'key'       => 'postcode',
                'value'     => $location_val,
                'compare'   => 'LIKE'
            )
        );                          
    }

    // property type filtering
    if(isset( $_POST['type'] ) && $_POST['type']){
        $posts['meta_query'][] = array(
            'key'       => 'type_of_property',
            'value'     => $_POST['type'],
            'compare'   => 'IN'
        );
    }

    // secondary flash filtering
    if(isset( $_POST['flash_type'] ) && $_POST['flash_type']){
        $posts['meta_query'][] = array(
            'key'       => 'optional_category',
            'value'     => $_POST['flash_type'],
            'compare'   => 'IN'
        );
    }

    $query = new WP_Query( $posts );?>

    <div class="row">
        <div class="col-12">
            <div id="crumb">
                <p>Now showing <span id="loop_count"></span> properties</p>

                <?php 
                    // check if property type has been selected if so loop through them and display them
                    if( $_POST['type'] ){
                        $crumb_type = $_POST['type'];

                        foreach($crumb_type as $val) {
                            echo '<span>'.$val.', </span>';
                        }
                    }

                    // check if min beds / max beds has been select if so display it in the crumb
                    if( $_POST['min_beds'] ){
                        $crumb_minbeds = $_POST['min_beds'];

                        echo '<p>from </p><span>'.$crumb_minbeds.' bedrooms </span>';
                    }

                    if( $_POST['max_beds']){
                        $crumb_maxbeds = $_POST['max_beds'];

                        echo '<p>up to </p><span>'.$crumb_maxbeds.' bedrooms, </span>';
                    }

                    // check if min price / max price has been select if so display it in the crumb
                    if( $_POST['min_price'] ){
                        $crumb_minprice = $_POST['min_price'];

                        echo '<p>from </p><span>£'.$crumb_minprice.' </span>';
                    }

                    if( $_POST['max_price']){
                        $crumb_maxprice = $_POST['max_price'];

                        echo '<p>up to </p><span>£'.$crumb_maxprice.' </span>';
                    }

                    // check if location is set 
                    if( $_POST['location'] ){
                        $crumb_location = $_POST['location'];

                        echo '<p>properties in </p><span>'.stripslashes($crumb_location).'</span>';
                    }

                    // check if secondary filters are applied, if so display a clickable box
                    if( $_POST['flash_type'] ): ?>
                        <div id="flash_crumbs">
                            <?php 
                            if( in_array('Ideal First Time Buy', $_POST['flash_type']) ): ?>
                                <a href="javascript:;">Ideal First Time Buy <span data-id="first_time" >&times;</span></a>
                            <?php endif; 

                            if( in_array('Ideal Investment', $_POST['flash_type']) ): ?>
                                <a href="javascript:;">Ideal Investment <span data-id="investment" >&times;</span></a>
                            <?php endif; 

                            if( in_array('Under Offer', $_POST['flash_type']) ): ?>
                                <a href="javascript:;">Under Offer <span data-id="under_offer" >&times;</span></a>
                            <?php endif; ?>
                        </div>
                    <?php endif; 
                ?>
            </div>
        </div>
    </div>

    <?php if( $query->have_posts() ): ?>    
        <div class="row">
            <?php while( $query->have_posts() ): $query->the_post() ?>
                <div class="col-sm-6 col-md-4 col-lg-3 post">
                    <div class="shadowwrapper2">
                        <a href="<?php the_permalink(); ?>">
                            <?php  
                                $main_field = get_field('images');
                                $first_row = $main_field[0];
                                $img = $first_row['image'];
                                $img_med = $img['sizes']['medium'];
                            ?>

                            <div class="propertywrapper">
                                <img class="img-fluid gal_imgs" src="<?php echo $img_med ?>" alt="<?php $img['alt']; ?>"/>

                                <?php $secondary_flash = get_field('optional_category'); ?>

                                <?php if($secondary_flash == "Ideal First Time Buy"): ?>
                                    <span class="second_flash">Ideal First Time Buy</span>
                                <?php elseif($secondary_flash == "Ideal Investment"): ?>
                                    <span class="second_flash">Ideal Investment</span>
                                <?php elseif($secondary_flash == "Under offer"): ?>
                                    <span class="second_flash">Under offer</span>
                                <?php endif; ?>
                            </div>

                            <div class="cornerflash">
                                <img src="<?php bloginfo('template_directory'); ?>/imgs/forsale.svg" alt="corner flash">
                            </div> 

                            <div class="propertyinfo">
                                <div class="row m-0">
                                    <div class="col-6 p-0 mt-2"><?php the_field('type_of_property'); ?></div>
                                    <div class="col-6 p-0 mt-2"><?php the_field('bedrooms'); ?> bedrooms</div>
                                </div>
                            </div>

                            <div class="streetpricewrapper">
                                <p class="streetname">
                                    <?php the_field('street'); ?>, <?php the_field('town'); ?>
                                </p>
                                <p class="price">
                                    £<?php the_field('property_price'); ?>
                                </p>    
                            </div>                              
                        </a>
                    </div>
                </div>
            <?php endwhile; ?>
        </div>
    <?php
    wp_reset_postdata(); 
    endif; 
    wp_die();
}

1 Ответ

0 голосов
/ 12 июня 2018

Вы передаете больше данных с помощью HTML, что может увеличить задержку.

Иногда HTML повторяется, что может значительно увеличить объем передаваемой информации.Часто запросы AJAX направлены на что-то вроде большого списка элементов, и в этом случае может иметь смысл просто перенести уникальные данные из списка и создать HTML-код с циклом на входном конце.

Кроме того,иногда вы можете захотеть создать разные виды разметки с одними и теми же данными, и в этом случае JSON будет более универсальным.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...