You can probably do it with procedures, but the simplest approach to me would still be a SQL/PHP mix.
And just to be clear, in the first post you say that you have customer_id and products_ids, which is in line with the query you posted, as opposed to your last post where you say that you don't have customer_id. If you simply ment that you only have it in the tables from which you pull data, I'm with you. Because you will indeed need a combination of customer_id and products_id to remove the correct entries from the wishlist.
$qry = 'SELECT c.customers_id, op.products_id
FROM customers c
INNER JOIN orders o ON o.customers_id = c.customers_id
INNER JOIN orders_products op ON op.orders_id = o.orders_id
ORDER BY customer_id, products_id';
$result = mysql_query($qry);
while($row = mysql_fetch_assoc($result))
$customers[$row['customer_id']][] = $row['products_id'];
foreach($customers as $customer => $items) {
$item_str = implode(',', $items);
/* since this is untested code, I'd start by dumping output to screen or file
for a couple of entries and double check... */
mysql_query('DELETE FROM customers_wishlist WHERE products_id IN ('.$item_str.') AND customer_id = ' . $customer);
}
And you could of course use mysqli and a prepared statement for the delete and just change the parameters. Do test the above, but if I've understood you correctly, it should indeed solve your problem.