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>';
Are you trying to get terms from the results array? This search shows other user posts that fetch data from the array:
https://support.searchandfilter.com/forums/search/sf_current_query+active_terms/
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));
?>
Do you mean that if the user does not use the filters or search, then you want no results? You would need to edit your template file to add some logic in. Like this:
global $searchandfilter;
$sf_current_query = $searchandfilter->get(1024)->current_query();
if ((!$sf_current_query->is_filtered())&&($sf_current_query->get_search_term()=="")) {
echo '<div>Nothing to see here folks!</div>';
} else {
// your template archive code/loop here
}
Change 1024 to the ID number of your form (from the form shortcode).
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?
For both questions, I am not skilled enough to do this, and this level of customization is not covered by support. You would need to use a third party freelance coder.
With some custom coding, displaying the current filters is possible, but it is not easy. We plan to make it a feature of V3 (in development). But clearing them singly is not so easy. To clear them all (to reset the form), you would need to have a button that calls the form reset. That is possible. See this (and the post it refers to):
https://support.searchandfilter.com/forums/topic/link-markup-for-reset-filter-button-that-is-outside-of-the-ui-markup/
This documentation may be what you are looking for (note, if you are using Ajax to refresh the page, any such output of the query needs to be inside the Ajax container):
https://www.designsandcode.com/documentation/search-filter-pro/accessing-search-data/
There are many snippets also on this forum. Try this search:
https://support.searchandfilter.com/forums/search/current_query/
You need to fetch the values from the taxonomy form fields. Be aware that some search terms will be held as arrays, and not single strings/values.
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?
With some custom coding, it is partly possible, but it is not easy, and so not included in our support. We plan to make it a feature of V3 (in development).
This documentation may be what you are looking for (note, if you are using Ajax to refresh the page, any such output of the query needs to be inside the Ajax container):
https://www.designsandcode.com/documentation/search-filter-pro/accessing-search-data/
There are many snippets also on this forum. Try this search:
https://support.searchandfilter.com/forums/search/current_query/
You need to fetch the values from the taxonomy form fields. Be aware that some search terms will be held as arrays, and not single strings/values.
Ah, I see. You have three possible output combinations.
Try this:
<?php global $searchandfilter;
$sf_current_query = $searchandfilter->get(2398)->current_query();
$searchTerm = $sf_current_query->get_search_term();
$args = array(
"str" => '%2$s',
"delim" => array(", ", " - "),
"field_delim" => ', ',
"show_all_if_empty" => false
);
?>
<?php global $wp_query;
$fields_html = $sf_current_query->get_fields_html( array("_sft_clinical-area", "_sft_program", "_sft_type"), $args);
if (( $searchTerm <> "" ) && ( $fields_html <> "" ) ){
$field_delim = ', ';
} else {
$field_delim = '';
}
echo $wp_query->found_posts; ?>
Search Results for <?php echo $searchTerm . $field_delim . $fields_html; ?>
Maybe?
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>';