Skip to content

Filtrering og søk

Tillegget inkluderer et sett med hjelpefunksjoner for å bygge egendefinerte filter- og søkegrensesnitt ved hjelp av malfunksjoner.

Filtrering gjøres gjennom URL-spørringsparametere. Når en side lastes med ?workplace=oslo, begrenses stillingsstrømmen automatisk til stillinger der arbeidsstedfeltet inneholder «Oslo».

Tillegget tilbyr hjelpefunksjoner for å bygge filter-URL-er, telle treff og sjekke aktiv tilstand.

Legg til et enkelt søkeskjema som søker på tvers av all stillingsdata:

<form method="get">
<label for="jobSearch">Søk</label>
<input
type="text"
value="<?php echo $_GET['jobSearch'] ?? ''; ?>"
name="jobSearch"
id="jobSearch"
/>
<button type="submit">Søk</button>
</form>

Returnerer en liste over alle distinkte verdier for et gitt felt på tvers av alle stillingsannonser. Bruk dette til å bygge filteralternativer.

get_jobpost_filters( $field, $reduce_by_filter );
ParameterTypePåkrevdBeskrivelse
$fieldstringJaFeltnavnet
$reduce_by_filterboolNeiHvis true, returneres bare verdier som matcher gjeldende filter. Standard: false
<?php
$locations = get_jobpost_filters('workplace');
if ($locations):
echo "<h3>Steder</h3><ul>";
foreach ($locations as $location):
$url = get_jobpost_filter_url('workplace', $location);
echo "<li><a href='$url'>$location</a></li>";
endforeach;
echo "</ul>";
endif;
?>

Genererer en URL som slår et filter av eller på. Hvis filteret allerede er aktivt, fjerner URL-en det.

get_jobpost_filter_url( $field, $value );
ParameterTypePåkrevdBeskrivelse
$fieldstringJaFeltet det skal filtreres etter
$valuestringJaVerdien det skal filtreres etter
<?php
$url = get_jobpost_filter_url('workplace', 'Oslo');
echo "<a href='$url'>Oslo</a>";
?>

Returnerer antall stillinger som matcher en spesifikk filterverdi.

get_jobpost_filter_count( $field, $value );
<?php
$url = get_jobpost_filter_url('workplace', 'Oslo');
$count = get_jobpost_filter_count('workplace', 'Oslo');
echo "<a href='$url'>Oslo ($count)</a>";
?>

Sjekk om et filter er aktivt.

has_jobpost_filter( $field, $value );
ParameterTypePåkrevdBeskrivelse
$fieldstringJaFeltnavnet
$valuestringNeiHvis satt, sjekkes om denne spesifikke verdien er aktiv

Her er en gjenbrukbar funksjon som kombinerer alle filterhjelperne:

<?php
function jobPostFilter(string $field, string $title, bool $reduce = false) {
$items = get_jobpost_filters($field, $reduce);
if (empty($items)) return;
echo "<h3>$title</h3>";
echo "<ul>";
foreach ($items as $item) {
$url = get_jobpost_filter_url($field, $item);
$count = get_jobpost_filter_count($field, $item);
$active = has_jobpost_filter($field, $item) ? 'active' : '';
echo "<li class='$active'>";
echo "<a href='$url' rel='nofollow'>$item ($count)</a>";
echo "</li>";
}
echo "</ul>";
}
?>
<aside>
<div class="job-filter">
<?php jobPostFilter('workplace', 'Sted', true); ?>
</div>
<div class="job-filter">
<?php jobPostFilter('type', 'Stillingstype', true); ?>
</div>
</aside>

Du kan registrere filterfunksjonen som en kortkode i temaets functions.php eller via et kodeutvidelsestillegg:

<?php
function jobPostFilter(string $field, string $title, bool $reduce = false) {
$items = get_jobpost_filters($field, $reduce);
$html = '';
if (empty($items)) return $html;
$html .= "<h3>$title</h3>";
$html .= "<ul>";
foreach ($items as $item) {
$url = get_jobpost_filter_url($field, $item);
$count = get_jobpost_filter_count($field, $item);
$active = has_jobpost_filter($field, $item) ? 'active' : '';
$html .= "<li class='$active'>";
$html .= "<a href='$url' rel='nofollow'>$item ($count)</a>";
$html .= "</li>";
}
$html .= "</ul>";
return $html;
}
add_shortcode('job_filter', function ($params = []) {
if (!function_exists('have_jobposts')) return '';
$params = array_change_key_case((array) $params, CASE_LOWER);
$options = shortcode_atts([
'field' => 'type',
'title' => 'Stillingstype',
'reduce' => '1'
], $params);
return jobPostFilter(
(string) $options['field'],
(string) $options['title'],
(bool) $options['reduce']
);
});
// Bruk: [job_filter field="workplace" title="Sted" reduce="1"]