Показать html для выбранных товаров или категорий товаров - PullRequest
2 голосов
/ 26 февраля 2020

Здравствуйте. Я использую расширенный плагин для настраиваемого поля для отображения некоторых html только для выбранных продуктов или только для продуктов для выбранных категорий на странице параметров со средством выбора отношений. Вместо этого мой результат отображается для всех продуктов. Вот что у меня есть:

$products = get_field('products_picker', 'option');
$categories =  get_field('categories_picker', 'option');
$prom_img = get_field('prom_img', 'option');


if ( $products ) {

	foreach( $products as $p ):
	
       if( $post->ID == $p->ID ):

 	<img src="<?php echo  $prom_img['url']; ?>">


    endif;
	endforeach;
		}

 if ( $categories ) {

	foreach( $categories as $term ):
	
       $category = get_term( $term );
    
   if( has_term( $category, 'product_cat', $post )) {
      ?>

 <img src="<?php echo  $prom_img['url']; ?>">

    endif;
	endforeach;
		}

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

В подобных случаях я создаю новый wp_query, передавая массив с идентификаторами постов, как показано ниже:

 $posts = get_field('products_picker', 'option');
 $new_query = new WP_Query(array(
  'post_type'     => array('post'),
  'post__in'      => $posts,
  'orderby'       => 'post__in',
 ));

if ( $new_query->have_posts() ) :
while ( $new_query->have_posts() ) : $new_query->the_post();

//your code here

endwhile;
endif;

Для части категорий вы можете использовать запрос, подобный этому:

  $categories =  get_field('categories_picker', 'option');
  $args = array(
      'post_type' => 'post',
      'tax_query' => array(
          array(
              'taxonomy' => 'category',
              'field' => 'term_id',
              'terms' => $categories[0]
          )
       )
  );
  $cat_query = new WP_Query($args);
0 голосов
/ 26 февраля 2020

Я не проверял это в Wordpress, но первое, что я попробовал бы, это переименовать переменную $ post, которая тянет поле ACF, в '$ posts' (множественное число).

Затем измените foreach l oop следующим образом.

$posts = get_field('products_picker', 'option');
$prom_img = get_field('prom_img', 'option');


if ( $posts ) {

	foreach( $posts as $post ):

		setup_postdata($post);
			
$sales_html = '<div class="promo-badge test"><img src=' . $prom_img['url'] . '></div>';

		wp_reset_postdata();
	endforeach;
		}

Это может исправить это ... Я не уверен, что вам не нужно будет превращать foreach l oop в настоящий стиль Wordpress l oop ( тип с while(have_posts()): the_post(); et c. как в @kaize ответ ниже)

Посмотрите здесь, если мое решение не помогло: https://www.advancedcustomfields.com/resources/querying-relationship-fields/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...