You are correct. You need to examine the data structure of the filter array and then, where multiple values are permitted, use a loop to output them.
You can print the filter array to screen with code like this:
$sf_current_query = $searchandfilter->get(1446)->current_query();
echo '<pre>';
print_r($sf_current_query->get_array());
echo '</pre>';
But then it is a matter of coding it in PHP. I cannot see an example code snippet on our forum though. I would have thought it possible to replace echo with explode where you are handling an array?
But I don’t access it using get_fields_html. I do it like this:
global $searchandfilter;
$sf_current_query = $searchandfilter->get(934)->current_query()->get_array();
$my_post_type = $sf_current_query[post_type][active_terms][0][value];
AnonymousInactive
I think I’ve sorted it thanks Trevor – sorry to mess you around!
If anyone else needs it, the code is as follows:
<?php
global $searchandfilter;
$sf_current_query = $searchandfilter->get(1446)->current_query();
$array_data = $sf_current_query->get_array();
$typeOfSearch = $array_data["_sft_pwb-brand"]["active_terms"][0]["value"];
echo $typeOfSearch ;
?>
Where _sft_pwb-brand is the field you need, and 1446 is the ID of the search form.
Have you output the full results array to see if what you want is in there, and where it is:
$sf_current_query = $searchandfilter->get(1446)->current_query();
echo '<pre>';
print_r($sf_current_query->get_array());
echo '</pre>';
AnonymousInactive
Hi,
Have an issue trying to extract post types via $postTypes1 = $sf_current_query->get_fields_html(array(“_sf_s”, “_sft_access_level”, “post_type”,”_sft_topic”));
echo $postTypes1;
only returns
Access Levels: All Access Levels (ie: _sft_access_level)
Topics: All Topics (ie: _sft_topic)
but no post types aka Data Type.
You can see the page results here:
The debug structure of the query which clearly shows them here:
Please see image link
or
Is this a bug with get_fields_html?
If the Data Types are checked as filters it’s possible to retrieve them but that is different from retrieving the associated post types via get fields.
<?php
$postTypes1 = $sf_current_query->get_fields_html(array("_sf_s", "_sft_access_level", "post_type","_sft_topic"));
echo $postTypes1;
//echo $sf_current_query->is_filtered();
$postTypesAll = $sf_current_query->get_array();
//var_dump($postTypesAll);
//print_r(array_values($postTypesAll));
$postTypes = array_column($postTypesAll, 'active_terms');
//var_dump($postTypes);
//print_r(array_values($postTypes));
$newArray = array();
foreach ($postTypes as $entry) {
$names = array_column($entry, 'name');
}
//var_dump($names);
//print_r(array_values($names));
$dataTypes = "<br>Data Types: ";
$breakChars = ", ";
//echo $dataTypes;
for ($i = 0; $i < count($names); $i++) {
$nameCompare = strcmp($names[$i], "Posts");
if ($nameCompare == 0) {
$names[$i] = 'Articles';
}
//echo $names[$i];
if ($i < count($names) - 1) {
echo $breakChars;
}
}
//var_dump($names);
//print_r(array_values($names));
?>
AnonymousInactive
Thanks this code is doing the job for me:
<?php
global $searchandfilter;
$sf_current_query = $searchandfilter->get(3301)->current_query()->get_array();
foreach ($sf_current_query as $key => $value) {
$type = $value['type'];
$valuei = $value['active_terms'][0]['value'];
$valuei1 = $value['active_terms'][1]['value'];
$name = $value['active_terms'][0]['name'];
$name1 = $value['active_terms'][1]['name'];
if ($key == '_sft_category') {
if ($name1 == NULL) {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo $name;
echo '</button>';
} else {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo $name;
echo '</button>';
echo '<button id="'.$key.'" class="but'.$type.'">';
echo $name1;
echo '</button>';
}
}
if ($key == '_sft_materiaalsoorten') {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo $name;
echo '</button>';
}
if ($key == '_sfm_prijsklasse') {
if ($valuei == 0) {
echo '';
} else {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo 'Prijsklasse: ';
echo $name;
echo ' vanaf';
echo '</button>';
}
if ($valuei1 == 50000) {
echo '';
} else {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo 'Prijsklasse: ';
echo $name1;
echo ' tot';
echo '</button>';
}
}
if ($key == '_sfm_vrije_valhoogte') {
if ($valuei == 0) {
echo '';
} else {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo 'Valhoogte: ';
echo $name;
echo ' vanaf';
echo '</button>';
}
if ($valuei1 == 300) {
echo '';
} else {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo 'Valhoogte: ';
echo $name1;
echo ' tot';
echo '</button>';
}
}
if ($key == '_sfm_beschikbare_obstakelvrije_ruimte') {
if ($valuei == 0) {
echo '';
} else {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo 'Beschikbare obstakelvrije ruimte: ';
echo $name;
echo ' vanaf';
echo '</button>';
}
if ($valuei1 == 350) {
echo '';
} else {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo 'Beschikbare obstakelvrije ruimte: ';
echo $name1;
echo ' tot';
echo '</button>';
}
}
if ($key == '_sfm_leeftijdsindicatie_van') {
if ($valuei == 0) {
echo '';
} else {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo 'Leeftijdsindicatie: vanaf ';
echo $name;
echo '</button>';
}
if ($valuei1 == 20) {
echo '';
} else {
echo '<button id="'.$key.'" class="but'.$type.'">';
echo 'Leeftijdsindicatie: tot ';
echo $name1;
echo '</button>';
}
}
}
?>
But what now? How can I make it when somebody clicks on a button the filter turns off?
AnonymousInactive
Thanks Trevor. I’m pretty new to PHP so I hope you dont mind me asking questions.
I got this code:
global $searchandfilter;
$sf_current_query = $searchandfilter->get(3301)->current_query()->get_array();
foreach($sf_current_query as $key) {
$type = $key['type'];
$name = $key['active_terms'][0]['name'];
$name1 = $key['active_terms'][1]['name'];
echo '<button class="' . $type . '">';
echo $name;
if ($name1 == NULL) {
} else {
echo ' - ';
echo $name1;
}
echo '</button>';
}
I want the id of the button to be the array name.
Like: <button id="_sfm_prijsklasse" class="post_meta">
<button id="_sft_category" class="taxonomy">
How can I do this?
I am not sure, but a good place to start is to echo the entire query array to the screen so you can see what everything is. Like this:
$sf_current_query = $searchandfilter->get(53)->current_query();
echo '<pre>';
print_r($sf_current_query->get_array());
echo '</pre>';
AnonymousInactive
Unfortunately that’s a no-go. The complete code I put in (using your good chunk there) looked like:
<?php global $searchandfilter;
$sf_current_query = $searchandfilter->get(15)->current_query()->get_array();
echo '<strong>Filtered by:</strong>';
if ( is_empty($sf_current_query ) ) {
echo "all";
} else {
foreach($sf_current_query as $key) {
echo ' • ' . $key['active_terms'][0]['name'] . ' ';
}
}?>
Am I missing something above if? Feels like that’s maybe where I’m off?
(The page does not display anything – no sidebar, no search form, so as-is above it pretty broken – did I close off the function properly?)
AnonymousInactive
For clarity, this is what I used:
global $searchandfilter;
$sf_current_query = $searchandfilter->get(339)->current_query()->get_array();
foreach($sf_current_query as $key) {
echo '<div>' . $key['active_terms'][0]['name'] . '</div>';
}