Ich muss in meinem Fall alles mit "und" filtern. Kannst du mir da einen Hook basteln damit er und anstatt oder verwendet?
Er sucht die Begriffe ja in Titel und Beschreibung?
Damit man Produkte mittels UND in einer Liste filtern kann, kann man diesen Filter nutzen. Es ergänzt die Liste um ein weiteres Feld "AND filter".
Ist dieses Feld befüllt, wird die Liste nach dem Laden von der API nochmals gefiltert.
function atkp_list_modify_productlist_callback( $products, $list_id ) {
$andfilter = ATKPTools::get_post_setting( $list_id, ATKP_LIST_POSTTYPE . '_andfilter' );
if($andfilter == '')
return $products;
$andkeywords = explode(',', $andfilter);
$products_filtered = array();
foreach($products as $product_arr) {
if($product_arr['type'] != 'product') {
$products_filtered[] = $product_arr;
continue;
}
$all_found = array();
foreach($andkeywords as $andkeyword) {
$andkeyword = trim($andkeyword);
if(ATKPTools::str_contains($product_arr['value']->title, $andkeyword, false) ) {
$all_found[$andkeyword] = $andkeyword;
}
if(ATKPTools::str_contains($product_arr['value']->description, $andkeyword, false)) {
$all_found[$andkeyword] = $andkeyword;
}
if(ATKPTools::str_contains($product_arr['value']->features, $andkeyword, false)) {
$all_found[$andkeyword] = $andkeyword;
}
}
if(count($all_found) >= count($andkeywords))
$products_filtered[] = $product_arr;
}
return $products_filtered;
}
add_filter( 'atkp_list_modify_productlist', 'atkp_list_modify_productlist_callback', 10,2);
function atkp_list_after_fields_callback($list_id) {
$list_id = get_the_ID();
?>
<tr>
<th scope="row">
<label for="">
<?php _e( 'AND filter', ATKP_PLUGIN_PREFIX ) ?>:
</label>
</th>
<td>
<input type="text" style="width:100%" id="<?php echo ATKP_LIST_POSTTYPE . '_andfilter' ?>"
name="<?php echo ATKP_LIST_POSTTYPE . '_andfilter' ?>"
value="<?php echo ATKPTools::get_post_setting($list_id, ATKP_LIST_POSTTYPE . '_andfilter', true ); ?>">
</td>
</tr>
<?php
}
add_action('atkp_list_after_fields', 'atkp_list_after_fields_callback', 10, 1);
function atkp_list_save_fields_callback($list_id) {
$minpercentage = ATKPTools::get_post_parameter( ATKP_LIST_POSTTYPE . '_andfilter', 'string' );
ATKPTools::set_post_setting( $list_id, ATKP_LIST_POSTTYPE . '_andfilter', $minpercentage );
}
add_action('atkp_list_save_fields', 'atkp_list_save_fields_callback', 10, 1);
Fügen Sie dieses Snippet einfach in Ihre functions.php oder in ein Snippets-Plugin ein.