Как исправить дубликат отправки формы в Wordpress? - PullRequest
0 голосов
/ 30 октября 2019

Я работаю над исправлением формы поиска по умолчанию в WordPress. Я просто устанавливаю некоторые фильтры, чтобы пользователь выбирал, затем нажимал ок, чтобы искать с фильтром, и все работало нормально, кроме флажка тегов.

Я пробовал все это: тег (строка) - использовать тег slug. tag_id (int) - использовать идентификатор тега. tag__and (массив) - использовать идентификаторы тегов. tag__in (массив) - использовать идентификаторы тегов. tag__not_in (массив) - использовать идентификаторы тегов. tag_slug__and (array) - использовать теговые слагы. tag_slug__in (массив) - используйте теги slugs.

, но результаты совпадают.

Моя форма поиска в searchform.php

<form role="search" method="get" id="searchform" class="skytube-search-form" action="<?php echo home_url( '/' ); ?>">
    <input type="search" placeholder="<?php esc_attr_e( 'Search for what you want...', 'aldoustech' ); ?>" value="<?php the_search_query(); ?>" name="s" id="s" onkeyup="search()">
    <label for="order">الترتيب حسب التاريخ</label>
    <select name="order">
        <option <?php if ($_GET['order'] == 'ASC') { ?>selected="true" <?php }; ?>value="ASC">الأقدم</option>
        <option <?php if ($_GET['order'] == 'DESC') { ?>selected="true" <?php }; ?>value="DESC">الأحدث</option>
    </select>
    <label for="posts_per_page">عدد النتائج المعروضة</label>
    <select name="posts_per_page">
        <option <?php if ($_GET['posts_per_page'] == '10') { ?>selected="true" <?php }; ?>value="10">10</option>
        <option <?php if ($_GET['posts_per_page'] == '50') { ?>selected="true" <?php }; ?>value="50">50</option>
        <option <?php if ($_GET['posts_per_page'] == '100') { ?>selected="true" <?php }; ?>value="100">100</option>
    </select>
    <label for="category_name">التصنيف</label>
    <select name="category_name">
        <option <?php if ($_GET['category_name'] == '') { ?>selected="true" <?php }; ?>value="">
            الكل
        </option>
        <option <?php if ($_GET['category_name'] == 'مسلسلات-أنمي') { ?>selected="true" <?php }; ?>value="مسلسلات-أنمي">
            مسلسلات أنمي
        </option>
        <option <?php if ($_GET['category_name'] == 'مسلسلات آسيوية') { ?>selected="true" <?php }; ?>value="مسلسلات آسيوية">
            مسلسلات آسيوية
        </option>
        <option <?php if ($_GET['category_name'] == 'مسلسلات-الأنيميشن-و-الكرتون') { ?>selected="true" <?php }; ?>value="مسلسلات-الأنيميشن-و-الكرتون">
            مسلسلات الأنيميشن و الكرتون
        </option>
        <option <?php if ($_GET['category_name'] == 'أفلام-أنمي') { ?>selected="true" <?php }; ?>value="أفلام-أنمي">
            أفلام أنمي
        </option>
        <option <?php if ($_GET['category_name'] == 'أفلام آسيوية') { ?>selected="true" <?php }; ?>value="أفلام آسيوية">
            أفلام آسيوية
        </option>
        <option <?php if ($_GET['category_name'] == 'أفلام-الأنيميشن-و-الكرتون') { ?>selected="true" <?php }; ?>value="أفلام-الأنيميشن-و-الكرتون">
            أفلام الأنيميشن و الكرتون
        </option>
    </select>
    <div>
        <?php
            if( $terms = get_terms( array(
                'taxonomy' => 'post_tag',
                'orderby' => 'name'
            ) ) ) : 
                foreach ( $terms as $term ) :
                    echo '<input type="checkbox" name="tag" value="' . $term->slug . '"' . (($_GET['tag'] ==  $term->slug)?'checked':"") . '> ' . $term->name;
                endforeach;
            endif;
        ?>
    </div>
    <input type="submit" id="searchsubmit" value="<?php esc_attr_e( 'Search', 'aldoustech' ); ?>">
</form>

Когда я выбираю некоторые изФильтры затем нажимают кнопку поиска, URL-адрес становится примерно таким.

http://localhost:8080/wordpress/?s=&order=ASC&posts_per_page=10&cat=3

, и когда я выбираю один тег, URL-адрес будет выглядеть следующим образом

http://localhost:8080/wordpress/?s=&order=ASC&posts_per_page=10&cat=3&tag=hello

Оба URL-адреса хороши, но когда я выбираю большечем один тег, URL стал таким.

http://localhost:8080/wordpress/?s=&order=ASC&posts_per_page=10&cat=3&tag=hello&tag=bye

Вы можете увидеть дубликат tag=hello&tag=bye

Эта форма не дает желаемый результат, потому что он должен быть похож наэто:

tag=hello+bye

1 Ответ

0 голосов
/ 01 ноября 2019

Этот код работал для меня.

// In footer.php
            <script type="text/javascript">
                // Get the selected tags in search
                function getTheCheckedTags() {
                    var items = document.getElementsByName('tags');
                    var selectedItems = "";
                    for(var i=0; i<items.length; i++){
                        if(items[i].type=='checkbox' && items[i].checked==true)
                            selectedItems+=items[i].value+",";
                    }
                    document.getElementsByName('tag')[0].value = selectedItems;
                }
                document.getElementById('searchform').addEventListener('change', getTheCheckedTags);
            </script>
// Don't forget to call the Jquery before this code.
            <script>
            $('#searchform').submit( function(){
              var tags = $('.tags');
              tags.prop('disabled', true);
            });
            </script>
// In searchform.php
<form role="search" method="get" id="searchform" class="skytube-search-form" action="<?php echo home_url( '/' ); ?>">
    <input type="search" placeholder="<?php esc_attr_e( 'Search for what you want...', 'aldoustech' ); ?>" value="<?php the_search_query(); ?>" name="s" id="s" onkeyup="search()">
    <label for="order">الترتيب حسب التاريخ</label>
    <select name="order">
        <option <?php if ($_GET['order'] == 'ASC') { ?>selected="true" <?php }; ?>value="ASC">الأقدم</option>
        <option <?php if ($_GET['order'] == 'DESC') { ?>selected="true" <?php }; ?>value="DESC">الأحدث</option>
    </select>
    <label for="posts_per_page">عدد النتائج المعروضة</label>
    <select name="posts_per_page">
        <option <?php if ($_GET['posts_per_page'] == '10') { ?>selected="true" <?php }; ?>value="10">10</option>
        <option <?php if ($_GET['posts_per_page'] == '50') { ?>selected="true" <?php }; ?>value="50">50</option>
        <option <?php if ($_GET['posts_per_page'] == '100') { ?>selected="true" <?php }; ?>value="100">100</option>
    </select>
    <label for="category_name">التصنيف</label>
    <select name="category_name">
        <option <?php if ($_GET['category_name'] == '') { ?>selected="true" <?php }; ?>value="">
            الكل
        </option>
        <option <?php if ($_GET['category_name'] == 'مسلسلات-أنمي') { ?>selected="true" <?php }; ?>value="مسلسلات-أنمي">
            مسلسلات أنمي
        </option>
        <option <?php if ($_GET['category_name'] == 'مسلسلات آسيوية') { ?>selected="true" <?php }; ?>value="مسلسلات آسيوية">
            مسلسلات آسيوية
        </option>
        <option <?php if ($_GET['category_name'] == 'مسلسلات-الأنيميشن-و-الكرتون') { ?>selected="true" <?php }; ?>value="مسلسلات-الأنيميشن-و-الكرتون">
            مسلسلات الأنيميشن و الكرتون
        </option>
        <option <?php if ($_GET['category_name'] == 'أفلام-أنمي') { ?>selected="true" <?php }; ?>value="أفلام-أنمي">
            أفلام أنمي
        </option>
        <option <?php if ($_GET['category_name'] == 'أفلام آسيوية') { ?>selected="true" <?php }; ?>value="أفلام آسيوية">
            أفلام آسيوية
        </option>
        <option <?php if ($_GET['category_name'] == 'أفلام-الأنيميشن-و-الكرتون') { ?>selected="true" <?php }; ?>value="أفلام-الأنيميشن-و-الكرتون">
            أفلام الأنيميشن و الكرتون
        </option>
    </select>
    <div>
        <?php
            if( $terms = get_terms( array(
                'taxonomy' => 'post_tag',
                'orderby' => 'name'
            ) ) ) : 
                foreach ( $terms as $term ) :
                    echo '<input class="tags" type="checkbox" name="tags" value="' . $term->slug . '"' . (($_GET['tag'] ==  $term->slug)?'checked':"") . '> ' . $term->name;
                endforeach;
            endif;
        ?>
    </div>
    <input type="text" name="tag" value=""> نوع
    <input type="submit" id="searchsubmit" value="<?php esc_attr_e( 'Search', 'aldoustech' ); ?>">
</form>

Я сделал код самостоятельно и решил проблему с помощью JavaScript, чтобы добавить отмеченные флажки в другое текстовое поле, а затем отправил текстовое поле сэто данные через форму.

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