Удалить параметр запроса URL, если значение не существует - PullRequest
0 голосов
/ 09 февраля 2019

I нашел этот бит очень полезного кода для создания раскрывающегося списка для использования в качестве строки запроса URL для нескольких пользовательских таксономий.

Приведенный ниже код в сочетании с набором if(isset($_GET['taxonomies'])) и if(empty($_GET['taxonomies'])) объявления в PHP в файле archive.php, что-то вроде фильтрации сообщений по трем настраиваемым таксономиям.

Однако, это работает, только если параметры запроса URL не пусты.Например:

example.com/custom-post-type-slug/?taxonomy1=term1&taxonomy2=termA&taxonomy3=termZ

... отлично работает.

example.com/custom-post-type-slug/?taxonomy1=term1&taxonomy2=termA

... тоже отлично работает.

Однако раскрывающийся список создается с помощью приведенного ниже кода.сгенерирует строку запроса URL, которая содержит пустые параметры запроса, такие как:

example.com/custom-post-type-slug/?taxonomy1=term1&taxonomy2=&taxonomy3=termZ

Пустой параметр запроса для таксономии 2 нарушает его.Как и все параметры запроса отсутствуют:

example.com/custom-post-type-slug/?taxonomy1=&taxonomy2=&taxonomy3=

Как настроить приведенный ниже код, чтобы удалить параметр запроса URL, если значение отсутствует?

Наиболее идеальная ситуацияв том, что если нет значения URL-запроса, параметр запроса удаляется из строки.Как мне сделать это с этим кодом?

Это в моем файле functions.php.

function get_terms_dropdown_taxonomy1($taxonomies, $args){
            $myterms = get_terms($taxonomies, $args);
            $output ="<select name='taxonomy1'>";
            $output .="<option value=''>All Taxonomy 1</option>";
            foreach($myterms as $term){
                    $root_url = get_bloginfo('url');
                    $term_taxonomy=$term->taxonomy;
                    $term_slug=$term->slug;
                    $term_name =$term->name;
                    $link = $term_slug;
                    $output .="<option value='".$link."'>".$term_name."</option>";
            }
            $output .="</select>";
    return $output;
    }

function get_terms_dropdown_taxonomy2($taxonomies, $args){
            $myterms = get_terms($taxonomies, $args);
            $output ="<select name='taxonomy2'>";
            $output .="<option value=''>All Taxonomy 2</option>";
            foreach($myterms as $term){
                    $root_url = get_bloginfo('url');
                    $term_taxonomy=$term->taxonomy;
                    $term_slug=$term->slug;
                    $term_name =$term->name;
                    $link = $term_slug;
                    $output .="<option value='".$link."'>".$term_name."</option>";
            }
            $output .="</select>";
    return $output;
    }

function get_terms_dropdown_taxonomy3($taxonomies, $args){
            $myterms = get_terms($taxonomies, $args);
            $output ="<select name='taxonomy3'>";
            $output .="<option value=''>All Taxonomy 3</option>";
            foreach($myterms as $term){
                    $root_url = get_bloginfo('url');
                    $term_taxonomy=$term->taxonomy;
                    $term_slug=$term->slug;
                    $term_name =$term->name;
                    $link = $term_slug;
                    $output .="<option value='".$link."'>".$term_name."</option>";
            }
            $output .="</select>";
    return $output;
    }

Между тем, это вывод в файл шаблона.

        <?php
            $taxonomies = array('taxonomy1');
            $args = array('orderby'=>'name','hide_empty'=>1);
            $select = get_terms_dropdown_taxonomy1($taxonomies, $args);
            $select = preg_replace("#<select([^>]*)>#", "<select$1 id='taxonomy1' class='dropdown' aria-label='Select a taxonomy 1'>", $select);
            echo $select;
        ?>

        <?php
            $taxonomies = array('taxonomy2');
            $args = array('orderby'=>'name','hide_empty'=>1);
            $select = get_terms_dropdown_taxonomy2($taxonomies, $args);
            $select = preg_replace("#<select([^>]*)>#", "<select$1 id='taxonomy2' class='dropdown' aria-label='Select a taxonomy 2'>", $select);
            echo $select;
        ?>

        <?php
            $taxonomies = array('taxonomy3');
            $args = array('orderby'=>'name','hide_empty'=>1);
            $select = get_terms_dropdown_taxonomy3($taxonomies, $args);
            $select = preg_replace("#<select([^>]*)>#", "<select$1 id='taxonomy3' class='dropdown' aria-label='Select a taxonomy 3'>", $select);
            echo $select;
        ?>

РЕДАКТИРОВАТЬ: Благодаря вашей помощи вот окончательный рабочий код.

<?php
$url = parse_url($_SERVER['REQUEST_URI']);

    // WORKING | all taxonomy1, taxonomy2, and taxonomy3; no values for any taxonomy; displays six most recent posts

    if(empty($_GET['taxonomy1']) && empty($_GET['taxonomy2']) && empty($_GET['taxonomy3'])) {

    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $exec_query = new WP_Query( array (
        'post_type'         => 'custom_post_type',
        'publish_status'    => 'publish',
        'posts_per_page'    => 6,
        'paged'             => $paged,
    ) );
    }

    // WORKING | taxonomy1 only; no values for taxonomy2 or taxonomy3

    elseif(empty($_GET['taxonomy2']) && empty($_GET['taxonomy3'])) {

    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $exec_query = new WP_Query( array (
        'post_type'         => 'custom_post_type',
        'publish_status'    => 'publish',
        'posts_per_page'    => 6,
        'paged'             => $paged,
                    'tax_query'         => array(
                        array(
                            'taxonomy'  => 'taxonomy1',
                            'field'     => 'slug',
                            'terms'     => $_GET['taxonomy1'],
                            'operator'  => 'IN',
                        ),
                    ),
    ) );
    }

    // WORKING | issue only; no values for taxonomy1 or taxonomy3; displays six most recent taxonomy2 posts

    elseif(empty($_GET['taxonomy1']) && empty($_GET['taxonomy3'])) {

    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $exec_query = new WP_Query( array (
        'post_type'         => 'custom_post_type',
        'publish_status'    => 'publish',
        'posts_per_page'    => 6,
        'paged'             => $paged,
                    'tax_query'         => array(
                        array(
                            'taxonomy'  => 'taxonomy2',
                            'field'     => 'slug',
                            'terms'     => $_GET['taxonomy2'],
                            'operator'  => 'IN',
                        ),
                    ),
    ) );
    }

    // WORKING | taxonomy3 only; no values for taxonomy1 or taxonomy2

    elseif(empty($_GET['taxonomy1']) && empty($_GET['taxonomy2'])) {

    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $exec_query = new WP_Query( array (
        'post_type'         => 'custom_post_type',
        'publish_status'    => 'publish',
        'posts_per_page'    => 6,
        'paged'             => $paged,
                    'tax_query'         => array(
                        array(
                            'taxonomy'  => 'taxonomy3',
                            'field'     => 'slug',
                            'terms'     => $_GET['taxonomy3'],
                            'operator'  => 'IN',
                        ),
                    ),
    ) );
    }   

    // WORKING | taxonomy2 in taxonomy3; no values for taxonomy1

    elseif(empty($_GET['taxonomy1'])) {

    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $exec_query = new WP_Query( array (
        'post_type'         => 'custom_post_type',
        'publish_status'    => 'publish',
        'posts_per_page'    => 6,
        'paged'             => $paged,
                    'tax_query'         => array(
                        'relation'      => 'AND',
                        array(
                            'taxonomy'  => 'taxonomy2',
                            'field'     => 'slug',
                            'terms'     => $_GET['taxonomy2'],
                            'operator'  => 'IN',
                        ),
                        array(
                            'taxonomy'  => 'taxonomy3',
                            'field'     => 'slug',
                            'terms'     => $_GET['taxonomy3'],
                            'operator'  => 'IN',
                        ),
                    ),
    ) );
    }

    // WORKING | taxonomy1 in taxonomy3; no values for taxonomy2

    elseif(empty($_GET['taxonomy2'])) {

    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $exec_query = new WP_Query( array (
        'post_type'         => 'custom_post_type',
        'publish_status'    => 'publish',
        'posts_per_page'    => 6,
        'paged'             => $paged,
                    'tax_query'         => array(
                        'relation'      => 'AND',
                        array(
                            'taxonomy'  => 'taxonomy1',
                            'field'     => 'slug',
                            'terms'     => $_GET['taxonomy1'],
                            'operator'  => 'IN',
                        ),
                        array(
                            'taxonomy'  => 'taxonomy3',
                            'field'     => 'slug',
                            'terms'     => $_GET['taxonomy3'],
                            'operator'  => 'IN',
                        ),
                    ),
    ) );
    }

    // WORKING | taxonomy1 on taxonomy2; no values for taxonomy3

    elseif(empty($_GET['taxonomy3'])) {

    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $exec_query = new WP_Query( array (
        'post_type'         => 'custom_post_type',
        'publish_status'    => 'publish',
        'posts_per_page'    => 6,
        'paged'             => $paged,
                    'tax_query'         => array(
                        'relation'      => 'AND',
                        array(
                            'taxonomy'  => 'taxonomy1',
                            'field'     => 'slug',
                            'terms'     => $_GET['taxonomy1'],
                            'operator'  => 'IN',
                        ),
                        array(
                            'taxonomy'  => 'taxonomy2',
                            'field'     => 'slug',
                            'terms'     => $_GET['taxonomy2'],
                            'operator'  => 'IN',
                        ),
                    ),
    ) );
    }

elseif(isset($_GET['taxonomy1']) && ($_GET['taxonomy2']) && ($_GET['taxonomy3'])) {

$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $exec_query = new WP_Query( array (
    'post_type'         => 'custom_post_type',
    'publish_status'    => 'publish',
    'posts_per_page'    => 6,
    'paged'             => $paged,
                'tax_query'         => array(
                    'relation'      => 'AND',
                    array(
                        'taxonomy'  => 'taxonomy1',
                        'field'     => 'slug',
                        'terms'     => $_GET['taxonomy1'],
                        'operator'  => 'IN',
                    ),
                    array(
                        'taxonomy'  => 'taxonomy2',
                        'field'     => 'slug',
                        'terms'     => $_GET['taxonomy2'],
                        'operator'  => 'IN',
                    ),
                    array(
                        'taxonomy'  => 'taxonomy3',
                        'field'     => 'slug',
                        'terms'     => $_GET['taxonomy3'],
                        'operator'  => 'IN',
                    ),
                ),
) );
}

    else{

    $paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1; $exec_query = new WP_Query( array (
        'post_type'         => 'custom_post_type',
        'publish_status'    => 'publish',
        'posts_per_page'    => 6,
        'paged'             => $paged,
    ) );
    }

    if ( $exec_query->have_posts() ) { ?><?php while ( $exec_query->have_posts() ): $exec_query->the_post(); ?>

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Чтобы проиллюстрировать то, что сказал @rickdenhaan, вот несколько примеров:

// Check if $variable is empty, using empty($variable)

$variable = ""; // true
$variable = " "; // false
$variable = 0; // true
$variable = 1; // false
$variable = null; // true
$variable = false; // true

// Check if $variable was defined, using isset($variable)

$variable = ""; // true
$variable = " "; // true
$variable = 0; // true
$variable = 1; // true
$variable = null; // false
$variable = false; // true

Любопытство: как описано в документации, функция empty(), по сути, является:

(!isset($variable) || $variable == false)
0 голосов
/ 09 февраля 2019

isset() вернет true, если ваш параметр запроса существует .Похоже, ваш код предполагает, что если параметр существует, он также содержит некоторые полезные значения.Это не то, что isset() проверяет.

В этом случае функция empty() , вероятно, то, что вы ищете.Это вернет true, если переменная не существует или если она содержит значение false-y, например, полученную вами пустую строку.

Изменение вашего if -статированияна if (!empty($_GET['taxonomies'])) следует сделать свое дело.

Имейте в виду, что строка "0" также считается false-y и, таким образом, «пустой», поэтому, если это допустимое значение для одного из параметров вашего запроса, вы 'для этого нужно добавить явную проверку.

...