Вставка пользовательской иерархии таксономии WordPress

#php #wordpress #loops #for-loop #taxonomy

#php #wordpress #циклы #for-цикл #таксономия

Вопрос:

У меня возникли некоторые проблемы с правильной работой этого цикла.

Я хочу вставить страну, штат, город, сообщество из карт Google в качестве иерархии в пользовательской таксономии WordPress. Все переменные устанавливаются, но когда он проходит через цикл for, он только заполняет и вставляет country или 1-й массив $loop[0] .

Я использую $pastID [$ d], чтобы сохранить последний term_id, чтобы использовать его в качестве родительского в следующем термине. Если это просто плохо, дайте мне знать.

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

     $custom_tax_name = "location";
    $loop = array();
    $loop[0] = $country = $GLOBALS['custom_array']['country'];
    $loop[1] = $state = $GLOBALS['custom_array']['state'];
    $loop[2] = $city = $GLOBALS['custom_array']['city'];
    $loop[3] = $community = $GLOBALS['custom_array']['community'];

$pastID = array();
$terms = array();

for($i = 0; $i<=3; $i  ) {
    $d = $i - 1;
    if (!empty($loop[$i])){
        $term_exist = term_exists( $loop[$i], $custom_tax_name );
        if (!$term_exist){
            if ($i == 0){
            $pastID[$d] = wp_insert_term("$loop[$i]", $custom_tax_name);   
            } else {
                if (empty($pastID[$d]['term_id'])){
                    $term = get_term_by('name', $loop[$i], $custom_tax_name);
                    $termParent = $term ? $term->parent : false;
                        if ($termParent == false){
                            continue;
                        }
                    $pastID[$d] = wp_insert_term("$loop[$i]", $custom_tax_name, array("parent" => $termParent));
                } else {
                    $termParent = $pastID[$d]['term_id'];
                    $pastID[$d] = wp_insert_term("$loop[$i]", $custom_tax_name, array("parent" => $termParent));
                }
            }
        } else {
            $pastID[$d] = $term_exist;
        }
        $terms[] = $loop[$i];
        delete_option('{$custom_tax_name}_children');
    } // nothing exist

}
  

Ответ №1:

Хорошо, итак, я смог понять это после того, как посмотрел и почувствовал себя немного медленно.

$ pastID должен иметь переменную $ i при ее настройке и $ d при ссылке на нее в следующем цикле. Приведенный ниже код создаст иерархическую таксономию глубиной до 4 , используя мои переменные для страны, штата, города и сообщества. Он проверит, существует ли переменная, и если нет, он убедится, что у нее есть родительский элемент, с которым ее можно связать или не вставлять. В любом случае спасибо.

 for($i = 0; $i<=3; $i  ) {
    $d = $i - 1;
    if (!empty($loop[$i])){
        $term_exist = term_exists( $loop[$i], $custom_tax_name );
        if (!$term_exist){
            if ($i == 0){
            $pastID[$i] = wp_insert_term($loop[$i], $custom_tax_name);   
            } else {
                if (empty($pastID[$d]['term_id'])){
                    $term = get_term_by('name', $loop[$i], $custom_tax_name);
                    $termParent = $term ? $term->parent : false;
                        if ($termParent == false){
                            continue;
                        }
                    $pastID[$i] = wp_insert_term($loop[$i], $custom_tax_name, array("parent" => $termParent));
                } else {
                    $termParent = $pastID[$d]['term_id'];
                    $pastID[$i] = wp_insert_term("$loop[$i]", $custom_tax_name, array("parent" => $termParent));
                }
            }
        } else {
            $pastID[$d] = $term_exist;
        }
        $terms[] = $loop[$i];
        delete_option('{$custom_tax_name}_children');
    } // nothing exist

}