kdev
  • 0
Новичок

Как перейти к тегированию архивов с помощью формы

  • 0

Я настроил пользовательский тип записи под названием «свойства». Эти сообщения могут быть помечены пользовательскими таксономиями «область» и «университет».

Я хотел бы иметь форму с раскрывающимся списком для каждого тега. Когда форма отправлена, я хотел бы перейти к URL-адресу, который отображает архив этих тегов.

Собственно два вопроса:

  1. Какой URL-адрес будет возвращать правильные сообщения?
  2. Как вы создаете этот URL-адрес с формой?

По какой-то причине я думал, что это будет очень просто, но я просто не могу найти способ сделать это. Любая помощь горячо приветствуется.

Share
  1. Чтобы понять, как это сделать, вам сначала нужно знать, как работает URL-запрос или, точнее, какие переменные запроса вам нужны, поэтому:

    • 'post_type' — фильтровать по типам сообщений.
    • 'area' — фильтровать по таксономии области.
    • 'university' — фильтровать по университетской таксономии.

    поэтому ваш URL будет выглядеть так:

    //   http://www.domain.com/?post_type=properties&area=area_term&university=university_term
    

    Теперь, когда мы знаем, мы создаем форму с необходимыми полями:

    function display_area_university_filter_form(){
    ?>
    <form method="post" action="">
        <p><label for="area_t">Area: </label> <select name="area_t"><option value="">Select Area:</option>
        <?php 
            $area_terms =  get_categories('taxonomy=area'); 
            if (isset($_POST['area_t'])){
                foreach ($area_terms as $term) {
                    $option = '<option value="'.$term->slug.'"';
                    if ($_POST['area_t'] == $term->slug){
                        $option.= ' selected="selected"';
                    }
                    $option .= '>'.$term->name;
                    $option .= '</option>';
                    echo $option;
                }
            }else{
                foreach ($area_terms as $term) {
                    $option = '<option value="'.$term->slug.'"';
                    $option .= '>'.$term->name;
                    $option .= '</option>';
                    echo $option;
                }
            }
        ?>
        </select>
        </p>
        <p><label for="area_t">University: </label> <select name="area_t"><option value="">Select University:</option>
        <?php 
            $uni_terms =  get_categories('taxonomy=university'); 
            if (isset($_POST['univer'])){
                foreach ($uni_terms as $term) {
                    $option = '<option value="'.$term->slug.'"';
                    if ($_POST['univer'] == $term->slug){
                        $option.= ' selected="selected"';
                    }
                    $option .= '>'.$term->name;
                    $option .= '</option>';
                    echo $option;
                }
            }else{
                foreach ($uni_terms as $term) {
                    $option = '<option value="'.$term->slug.'"';
                    $option .= '>'.$term->name;
                    $option .= '</option>';
                    echo $option;
                }
            }
        ?>
        </select>
        </p>
        <input type="hidden" name="custom_filter" value="area_uni">
        <p><input type="submit" name="submit" value="submit"></p>
    </form>
    <?php }
    

    тогда все, что осталось, это просто обработать его:

    if (isset($_POST['submit']) && isset($_POST['custom_filter']) && $_POST['custom_filter'] == "area_uni"){
        $url =  get_bloginfo('url');
        $area = $uni = '';
        if (isset($_POST['area_t'])){
            $area = '&area='.$_POST['area_t'];
        }
        if (isset($_POST['univer'])){
            $uni = '&university='.$_POST['univer'];
        }
    
        $url .= '/?post_type=properties'.$area.$uni;
    
        wp_redirect( $url );
        exit();
    }
    
    • 0

Оставить ответ

You must login to add an answer.