Support » Plugin: Yet Another Related Posts Plugin (YARPP) » Related Products by meta_key

  • Resolved bling007

    (@bling007)


    Hello,
    This is an awesome plugin. I really adore what has been done with it.

    I am using this plugin to generate related posts (products) and its results are by far the best any plugin has ever even attempted. Its perfect.

    My only concern, as you would guess, is to try and show products that are infact “instock”. This value is stored in postmeta table under the meta_key = “_stock_status”

    There is only one thread that discusses this and it is sort of confusing. I have tried that method with no luck.

    I was wondering if you could share the shortcode on how one can go about incorporating the CUSTOM META with the YARPP plugin. In this case, the stock_status !

Viewing 5 replies - 1 through 5 (of 5 total)
  • Plugin Author Michael Nelson

    (@mnelson4)

    Hi @bling007, glad to hear you’ve been finding YARPP good for related products… with that one significant exception. We only just recently added support for related products to YARPP, so it’s probably got some kinks, like you discovered.

    I can’t think of a good fix for your situation just yet. We’ve wanted to add support for using postmeta in YARPP queries, but it got a bit complicated with YARPP’s caching. I’ll check to see if we can make this happen in a timely manner or not…

    Thread Starter bling007

    (@bling007)

    /*
    * Filter wp_query of YARPP Plugin
    */
    function yarpp_custom_wp_query($query) {
    	if(isset($query->yarpp_cache_type)){
    		$query->set('post_type', 'product');
    		$meta_query = [
    			'relation' => 'AND',
    			[
    				'key' => '_stock_status',
    				'value' => 'instock',
    				'compare' => '=',
    			]
    		];
    		$query->set('meta_query', $meta_query);	
    	}
    	
    	return $query;
    }
    
    function yarpp_custom_wp_query_product_page(){
    	if(is_product()){
    		add_filter('pre_get_posts', 'yarpp_custom_wp_query', 100);
    	}
    }
    add_filter('wp_head', 'yarpp_custom_wp_query_product_page');

    The above has been tested and works fine. It is open for more modifications.
    I hope it helps many Yarpp users out there. It would be my way of donating a little bit for this awesome and must-have plugin.

    Plugin Author Michael Nelson

    (@mnelson4)

    Oh cool thanks for sharing the solution for your issue! I hadn’t thought about using $query->yarpp_cache_type to determine if it’s a query initiated by YARPP or not. Good stuff!

    What e-commerce plugin does this integrate with? I’d guess WooCommerce but thought others might like to know (if they’re using plugin that doesn’t have that is_product() function they’ll get an error.)

    Also note that this filtering applies after YARPP has cached the related items. So if you’ve configured YARPP to show 5 related items, it will first find the 5 most similar products, and then remove all the ones which are out-of-stock. So if 2 of those related products are out of stock, it will only show 3 related products. And if they’re all out-of-stock, none will be shown. So that might be a little hiccup (the fix for which would be to instead determine which products to exclude before YARPP caches the related items, which is done in YARPP_Cache_Table::update and I don’t think there are any filters available to do that.)

    Thread Starter bling007

    (@bling007)

    Thanks, Michael. You are correct, this solution is for Woocommerce (as per the question). I use a modified version that directly modifies the query. I provided the is_product() method to avoid conflict with page/post_types != product.
    Assuming we still want to use the original plugin logic on other pages.

    When it comes to suggesting related products, it does not matter how many are suggested as long as they are related. So for this case, I simply increased the number to 50, which easily gives me 20+ products. Pretty great in my view.

    I would really not suggest excluding products before the query. Since products keep getting back instock and going outofstock, its better to rebuild cache and show as per the related-post’s stock status. It also saves the server’s resources.

    However, no e-commerce store or requirement is similar. This solution does help majority of the cases.

    function yarpp_custom_wp_query($query) {
    	if(isset($query->yarpp_cache_type)){
    		$query->set('post_type', 'product');
    		$meta_query = [
    			'relation' => 'AND',
    			[
    				'key' => '_stock_status',
    				'value' => 'instock',
    				'compare' => '=',
    			]
    		];
    		$query->set('meta_query', $meta_query);	
    	}
    	
    	return $query;
    }
    add_filter('pre_get_posts', 'yarpp_custom_wp_query', 100);

    The above will not consider if the page is the product page.

    Plugin Author Michael Nelson

    (@mnelson4)

    Ah ok thanks. Thanks a lot for sharing your solution @bling007 (and the modification). And ya thanks for sharing that, from your experience, excluding out-of-stock items AFTER caching instead of BEFORE is actually beneficial.
    I think we’ll refer to your solution in the future when folks ask to filter the YARPP query. So thanks!

    Lastly, is there anything else you need to consider this issue resolved?

Viewing 5 replies - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.