Have you verified how far into that callback you reach?
Asking because you’re using the algolia_should_index_term filter, but you’re also checking $item as if it’s a post object, when I believe it would be a term object.
So it’s possible the approach is wrong here in that regard. Instead it could be better to check if the $item term ID value is in your array of 3 IDs, and if yes, return false.
Thread Starter
jmask
(@jmask)
I tried this as well, no luck
// EXCLUDE TERM FROM BEING INDEXED
function custom_should_index_term( $should_index, $item ) {
$terms_to_exclude = array( 63983, 63903, 63749 );
if ( false === $should_index ) {
return $should_index;
error_log( "term was false before check" );
}
$post_term_ids = wp_get_post_terms( $item->ID, 'product_cat', array("fields" => "ids") );
$remaining_term_ids = array_diff( $post_term_ids, $terms_to_exclude );
if ( count( $remaining_term_ids ) === 0 ) {
return false;
error_log( "Post term was found in array" );
}
return $should_index;
}
Thread Starter
jmask
(@jmask)
I also tried this method
// EXCLUDE TERM FROM BEING INDEXED
function custom_should_index_term( $should_index, $item ) {
$terms_to_exclude = array( 63983, 63903, 63749 );
if ( false === $should_index ) {
return $should_index;
error_log( "term was false before check" );
}
$post_term_ids = wp_get_post_terms( $item->ID, 'product_cat', array("fields" => "ids") );
if ( in_array( $terms_to_exclude, $post_term_ids)) {
return false;
error_log( "Post term was found in array" );
}
return $should_index;
}
If both of those callbacks are still being added on to the algolia_should_index_term filter, then you’re very likely not getting a post object, you’re getting a term object. So your wp_get_post_terms() call is returning either an empty array or a WP_Error
https://developer.ww.wp.xz.cn/reference/classes/wp_term/
If you’re trying to prevent POSTS from being indexed based on if they have one of a few specific terms assigned to the given post, then you’ll want to use algolia_should_index_post which would make $item a WP_Post object and the rest would probably work out for you.
Thread Starter
jmask
(@jmask)
Here I have added a filter to the post index….
I want the post indexed, just not the 3 categories.
// add blacklist
function filter_post( $should_index, WP_Post $post )
{
$terms = get_the_terms($post->ID, 'product_cat');
foreach( $terms as $key => $term ){
if ( 63749 === $term->taxonomy ) {
return false;
error_log( 'RETURN FALSE: ' . print_r( $term->taxonomy, true ) );
}
if ( 63903 === $term->taxonomy ) {
return false;
error_log( 'RETURN FALSE: ' . print_r( $term->taxonomy, true ) );
}
if ( 63983 === $term->taxonomy ) {
return false;
error_log( 'RETURN FALSE: ' . print_r( $term->taxonomy, true ) );
}
}
return $should_index;
}
// Hook into Algolia to manipulate the post that should be indexed.
add_filter( 'algolia_should_index_searchable_post_product', 'filter_post', 10, 2 );
add_filter( 'algolia_should_index_post_product', 'filter_post', 10, 2 );
Still not working.
I also treated the object as a WP_Term object with the other method. Still not working…
I have debugged the object before and after and I am doing everything correctly. However it is still being indexed….
-
This reply was modified 4 years, 7 months ago by
jmask.
Not seeing those two filters in the plugin. You’re close but not quite matched up.
The two that would be focused on the posts, would be:
algolia_should_index_post
algolia_should_index_searchable_post
You’re appending _product improperly.
You’re also trying to compare the taxonomy slug to the term ID, so you’d want to change that all to $term->term_id for your comparisons.