Как я могу вернуть значение расширенного настраиваемого поля в форме расширенного поиска WordPress? - PullRequest
0 голосов
/ 07 февраля 2020

В моих функциях. php У меня есть форма сборки с WPAS, которая использует расширенные настраиваемые поля:

function project_gallery_filter_form() {
 
    $args = array();
		//$args['debug'] = true;
		$args['wp_query'] = array( 'post_type' => array('project'), 
								   'posts_per_page' => 32,
		                           'orderby' => 'title', 
		                           'order' => 'ASC',
								   'submit_text' => 'GO',
		                         );
								 
		$args['fields'][] = array(  'type' => 'search',
									'placeholder' => 'Search by Project #, City, or State'
								);
  		                         
		$products = get_field_object('field_5595540c6184c');
		$allproducts = array();
		foreach ($products['choices'] as $product)
		{
			if ($product != 'Select...') //if using checkbox, comment 'else' out
				$allproducts[$product] = $product;
			else 
				$allproducts[] = $product;
		}
		$args['fields'][] = array(  'type' => 'meta_key',
									'label' => 'Products',
									'format' => 'select',
									'meta_key' => 'products',
									'data_type' => 'ARRAY<CHAR>',
									'compare' => 'LIKE',
									'submit_text' => 'GO',
									'values' => $allproducts
								);

		$applications = get_field_object('field_559551c77d1c6');
		$allapplications = array();
		foreach ($applications['choices'] as $application)
		{
			if ($application != 'Select...') //if using checkbox, comment 'else' out
				$allapplications[$application] = $application;
			else 
				$allapplications[] = $application;
		}
		$args['fields'][] = array(  'type' => 'meta_key',
									'label' => 'Application',
									'format' => 'select',
									'relation' => 'OR',
									'data_type' => 'ARRAY<CHAR>',
									'compare' => 'LIKE',
									'meta_key' => 'application',
									'values' => $allapplications 
								);
								
		
		$interiorFinishes = get_field_object('field_559731606f257');
		$allcolors = array();
		foreach ($interiorFinishes['choices'] as $color)
		{
			if ($color != 'Select...') //if using checkbox, comment 'else' out
				$allcolors[$color] = $color;
			else 
				$allcolors[] = $color;
		}
		$args['fields'][] = array(  'type' => 'meta_key',
									'label' => 'Interior Finish',
									'format' => 'select',
									'relation' => 'OR',
									'data_type' => 'ARRAY<CHAR>',
									'compare' => 'LIKE',
									'meta_key' => 'interior_finish',
									'values' => $allcolors 
								);
								
		$exteriorFinishes = get_field_object('field_559731716f258');
		$allcolors = array();
		foreach ($exteriorFinishes['choices'] as $color)
		{
			if ($color != 'Select...') //if using checkbox, comment 'else' out
				$allcolors[$color] = $color;
			else 
				$allcolors[] = $color;
		}
		$args['fields'][] = array(  'type' => 'meta_key',
									'label' => 'Exterior Finish',
									'format' => 'select',
									'relation' => 'OR',
									'data_type' => 'ARRAY<CHAR>',
									'compare' => 'LIKE',
									'meta_key' => 'exterior_finish',
									'values' => $allcolors 
								);
								
		$architecturalTypes = get_field_object('field_5597319f6f259');
		$allArchitecturalTypes = array();
		foreach ($architecturalTypes['choices'] as $architectural_type)
		{
			if ($architectural_type != 'Select...') //if using checkbox, comment 'else' out
				$allArchitecturalTypes[$architectural_type] = $architectural_type;
			else 
				$allArchitecturalTypes[] = $architectural_type;
		}
		$args['fields'][] = array(  'type' => 'meta_key',
									'label' => 'Architectural Type',
									'format' => 'select',
									'relation' => 'OR',
									'data_type' => 'ARRAY<CHAR>',
									'compare' => 'LIKE',
									'meta_key' => 'architectural_type',
									'values' => $allArchitecturalTypes 
								);
								
		$architecturalEnhancements = get_field_object('field_5ddc12499b723');
		$allArchitecturalEnhancements = array();
		foreach ($architecturalEnhancements['choices'] as $architectural_enhancement)
		{
			if ($architectural_enhancement != 'Select...') //if using checkbox, comment 'else' out
				$allArchitecturalEnhancements[$architectural_enhancement] = $architectural_enhancement;
			else
				$allArchitecturalEnhancements[] = $architectural_enhancement;
		}
		$args['fields'][] = array(  'type' => 'meta_key',
									'label' => 'Architectural Enhancement',
									'format' => 'select',
									'relation' => 'OR',
									'data_type' => 'ARRAY<CHAR>',
									'compare' => 'LIKE',
									'meta_key' => 'architectural_enhancement',
									'values' => $allArchitecturalEnhancements 
								);

								
		$glazes = get_field_object('field_5ddc12c09b724');
		$allglazes = array();
		foreach ($glazes['choices'] as $glazing)
		{
			if ($glazing != 'Select...') //if using checkbox, comment 'else' out
				$allglazes[$glazing] = $glazing;
			else 
				$allglazes[] = $glazing;
		}
		$args['fields'][] = array(  'type' => 'meta_key',
									'label' => 'Glazing',
									'format' => 'select',
									'relation' => 'OR',
									'data_type' => 'ARRAY<CHAR>',
									'compare' => 'LIKE',
									'meta_key' => 'glazing',
									'values' => $allglazes 
								);
								
		$accessory = get_field_object('field_5ddc13099b725');
		$allAccessories = array();
		foreach ($accessory['choices'] as $accessories)
		{
			if ($accessories != 'Select...') //if using checkbox, comment 'else' out
				$allAccessories[$accessories] = $accessories;
			else 
				$allAccessories[] = $accessories;
		}
		$args['fields'][] = array(  'type' => 'meta_key',
									'label' => 'Accessories',
									'format' => 'select',
									'relation' => 'OR',
									'data_type' => 'ARRAY<CHAR>',
									'compare' => 'LIKE',
									'meta_key' => 'accessories',
									'values' => $allAccessories 
								);
								
								
		/*
		$args['fields'][] = array( 'type' => 'orderby', 
		                           'format' => 'select', 
		                           'label' => 'Order by', 
		                           'values' => array('title' => 'Title', 
		                                             'date' => 'Date Added') );
		*/
		/*
		$args['fields'][] = array( 'type' => 'order', 
		                           'format' => 'radio', 
		                           'label' => 'Order', 
		                           'values' => array('ASC' => 'ASC', 'DESC' => 'DESC'), 
		                           'default' => 'ASC' );
		*/
		/*
		$args['fields'][] = array( 'type' => 'posts_per_page', 
		                           'format' => 'select', 
		                           'label' => 'Results per page', 
		                           'values' => array(2=>2, 5=>5, 10=>10), 
		                           'default' => 10 );
		*/
		
		$args['fields'][] = array('type' => 'reset',
                              'title' => 'Reset',
							  'pre_html' => '<div class="row" style="float:left;width:100%;">');
        
        $args['fields'][] = array('type' => 'html',
                          'value' => '<a class="button tiny reset" onclick="history.go(-1);">Back</a>');
						  
		$args['fields'][] = array( 'type' => 'submit',
		                           'class' => '',
		                           'submit_text' => 'GO',
								   'title' => 'GO',
								   'value' => 'GO',
								   'placeholder' => 'GO',
								   'post_html' => '</div>');
 
    register_wpas_form('project-gallery-filter-form', $args);    
}

Цель этой формы WPAS - позволить пользователям фильтровать сообщения по полям, которые я создал в расширенных настраиваемых полях. Нет проблем с приведенным выше кодом, но я считаю, что он уместен и необходим, если кто-то хочет помочь мне разобраться с этим.

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

То, что я пытаюсь сделать sh, это показать 'посты, которые вы можете как раздел, если вы заполняете форму WPAS, которую я создал, и она получает 0 результатов (это произойдет, если вы выберете слишком много фильтров, как и все мои поля ACF).

Я хочу сделать это, выбрав основное поле в форме WPAS («продукты»), а затем показывать сообщения с тем же значением, помеченные галочкой в ​​бэкэнде с помощью расширенных настраиваемых полей. Я перепробовал много вещей, изложенных в отличной документации ACF, но не могу понять. Поскольку я не пытаюсь получить значение поля в сообщении, а вместо этого на обычной странице, я не добился успеха.

...