Intereting Posts
Архивирование сообщений в wordpress Иерархия шаблонов для get_header () Получение пути к загруженному прикрепленному изображению после загрузки как вставлять внешнюю веб-страницу на мою страницу wordpress Отправлять почту пользователю только один раз, когда выбран определенный флажок и обновлен из профиля, обновленного администратором Размещение add_action () для обратного вызова ajax? Пользовательская функция для регистра пользователя в wp? Отображать имя последней дочерней категории Пользовательские поля не сохраняются в новейших WordPress 3.0.1 Как форматировать HTML-код короткого кода во внешнем файле Удалить текст в тегах заголовка в выдержке Поиск по полям пользовательских полей Автоматически присваивать сообщения авторам определенной категории Какие сценарии WordPress должны быть исполняемыми для новой установки? персонализированный планировщик сообщений для черновиков

Идентификаторы запросов и хранилища запросов в массиве

Я пытаюсь запросить продукты в WooCommerce и вернуть их идентификаторы в виде массива, который можно использовать для фильтрации условно. Я использую ACF Pro для добавления в продукт настраиваемых полей, для которых я использую условный код.

Я поговорил с моим другом-разработчиком, который предложил такой подход, который должен хранить массив в переменной $ ex_id или $ inc_id;

<?php query_posts( $args ); while ( have_posts() ) : the_post(); ?> <?php if( in_array( 'yes', get_field('exclude') ) ) { ?> <?php $ex_id[] = the_id() ;?> <?php } else if( in_array( 'yes', get_field('include') ) ) { ?> <?php $inc_id[] = the_id() ;?> <?php } ;?> <?php endwhile; wp_reset_query(); ?> 

Это не работает, поэтому я упростил условный код, чтобы найти, что возвращаемый идентификатор был идентификатором первой страницы;

 <?php query_posts(); while ( have_posts() ) : the_post(); ?> <?php the_id() ;?> <?php endwhile; wp_reset_query(); ?> 

Если я добавлю $ args (специально, 'post_type' => 'product', 'showposts' => -1), запрос будет работать, и вернутся правильные идентификаторы, только они будут напечатаны на экране.

Кто-нибудь знает, как я могу запросить и сохранить как переменную?

Solutions Collecting From Web of "Идентификаторы запросов и хранилища запросов в массиве"

Пара вещей – избегайте query_posts , используйте новый объект запроса или функцию get_posts ( читайте все об этом ). И the_ID() echo, вместо этого используйте get_the_ID() .

Тем не менее, вы можете сохранить некоторую память и обработку, просто перейдя по массиву сообщений (т. Е. Не используя правильный «цикл» и установив глобальную запись) и просто возьмите идентификатор напрямую:

 $product_posts = get_posts( array( 'posts_per_page' => -1, 'post_type' => 'product', ) ); $ex_id = $inc_id = array(); foreach ( $product_posts as $product_post ) { if ( in_array( 'yes', get_field( 'exclude', $product_post->ID ) ) ) $ex_id[] = $product_post->ID; elseif ( in_array( 'yes', get_field( 'include', $product_post->ID ) ) ) $inc_id[] = $product_post->ID; } 

Обратите внимание, как я get_field $product_post-ID в качестве второго аргумента get_field . Это связано с тем, что по умолчанию ACF будет использовать текущую «глобальную» запись, поэтому нам нужно сказать, какой почтой мы действительно хотим захватить данные.