Вернуть все значения, хранящиеся в var вне цикла foreach - PullRequest
1 голос
/ 07 января 2012

Итак, я предполагаю, что что-то перезаписывается, но я не уверен, как остановить это и получить все значения вне цикла. Есть идеи?

foreach($gallids as $gallterm)
{
    $postterms = wp_get_post_terms($gallterm, 'type', array("fields" => "slugs"));

    $checkmissing = $postterms[0];                  
    print_r($checkmissing); // Check Terms for missing images - works here.
}

print_r($checkmissing); // Check Terms for missing images - not working here 
                        // - seems to be getting last or first val only.

Ответы [ 5 ]

4 голосов
/ 07 января 2012

Прежде всего инициализируйте переменную, которую вы хотите использовать позже:

$checkmissing = array();

Затем внутри foreach добавьте первую запись условий публикации в этот массив:

foreach($gallids as $gallterm)
{
    list($checkmissing[]) = wp_get_post_terms($gallterm, 'type', array("fields" => "slugs"));
}

См. $checkmissing[], вот что эффективно предотвратит перезапись.Он будет добавлять каждый к массиву.

Наконец, вы можете вывести результат после цикла:

print_r($checkmissing);

Примечание: Вы должны сделатьнекоторая дополнительная обработка, если wp_get_post_terms возвращает пустой массив:

foreach($gallids as $gallterm)
{
    $terms = wp_get_post_terms($gallterm, 'type', array("fields" => "slugs"))
        AND list($checkmissing[]) = $terms
    ;
}
0 голосов
/ 30 августа 2013

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

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

Во-первых, вам нужно взять условия поста

$terms = get_the_terms( $post->ID, 'category' );

Далее вам нужно инициализировать переменную, которую вы хотите использовать позже:

$cat_terms = array();

Далее вы объявляете foreach для получения каждого отдельного идентификатора термина

foreach ( $terms as $term ) {
    $cat_terms[] = $term->term_id;
}

Теперь предположим, что вы хотите использовать возвращаемый список через запятую для этой переменной $ cat_terms. Мы собираемся использовать функцию «соединения»

$comma_separated_terms = join( ", ", $cat_terms );

Теперь предположим, что вы хотите использовать эту переменную, чтобы включить в свой цикл WP_Query, скажем, параметр 'category__in'. Мы собираемся использовать 'array_values'.

$values = array_values($cat_terms);

Приятно то, что теперь мы можем вставить эту переменную $ values ​​в аргументы WP_Query:

<?php global $post;
        $query = new WP_Query(array(
            'post_type' => 'post_type_name',
            'category__in' => $values));
?>

В моем конкретном случае клиент хотел, чтобы некоторые пользовательские типы сообщений отображались на боковой панели в зависимости от категорий сообщений в блоге. Поэтому мне нужно было собрать все условия в блоге и сопоставить их с условиями для категорий пользовательских типов сообщений.

Итоговый код Выглядел примерно так:

<?php
    $terms = get_the_terms( $post->ID, 'category' );

    $cat_terms = array();

    foreach ( $terms as $term ) {
        $cat_terms[] = $term->term_id;
    }

    $values = array_values($cat_terms);
?>
    <h3><?php echo $title; ?></h3>

    <?php global $post;
        $query = new WP_Query(array(
            'post_type' => 'custom_post_type',
            'category__in' => $values));

            if ( $query->have_posts() ) : ?>

                <?php while ( $query->have_posts() ) : $query->the_post(); ?>

                // Code for loop goes here

                <?php endwhile; endif; ?>

            <?php wp_reset_postdata(); ?> 
0 голосов
/ 07 января 2012
$checkmissing = array();
    $i=1;
    foreach($gallids as $gallterm)
    {
        $postterms = wp_get_post_terms($gallterm, 'type', array("fields" => "slugs"));

        $checkmissing[$i] = $postterms[0];                  
        //print_r($checkmissing); // Check Terms for missing images - works here.
    $i++;
    }

    print_r($checkmissing);
0 голосов
/ 07 января 2012
foreach($gallids as $gallterm) {

        $postterms = wp_get_post_terms( $gallterm, 'type', array("fields" => "slugs") );
        $checkmissing[] = $postterms[0];
    }

    print_r($checkmissing); //Now this will be a 2d array with all your values..
0 голосов
/ 07 января 2012
$checkmissing = array();

foreach($gallids as $gallterm)
{
    $postterms = wp_get_post_terms($gallterm, 'type', array("fields" => "slugs"));

    $checkmissing[] = $postterms[0];                  
    print_r($checkmissing); // Check Terms for missing images - works here.
}

print_r($checkmissing); // Check Terms for missing images
                        // will get all missing images as array
...