
The creek flooded the trail after tonights rain
The creek flooded the trail after tonights rain
Exploring some new city neighbourhoods
If you have setup a WooCommerce shop recently, or have enabled their HPOS1 you will want to enable compatibility mode as soon as you use any extension.
I’m running into issues with WooCommerce Memberships not able to create memberships for users, because it cannot find the users related to an order:
/**
* Returns users IDs from orders that contain products that could grant access to a given plan.
*
* TODO When WooCommerce starts using alternate data stores for products (perhaps from WC 3.5+) this method may require an update as it performs a direct SQL query assuming a standard WPDB data organization {FN 2018-07-23}
*
* @since 1.10.6
*
* @param int[] $access_product_ids array of product IDs that grant access to a plan upon purchase
* @return int[] array of user IDs
*/
private function get_users_for_retroactive_access( array $access_product_ids ) {
global $wpdb;
if ( ! empty( $access_product_ids ) ) {
// get orders that contain an access granting product (or variation) to the given plan
$product_ids = Strings_Helper::esc_sql_in_ids( $access_product_ids );
$orders_table = Framework\SV_WC_Order_Compatibility::get_orders_table();
$order_id_col = Framework\SV_WC_Plugin_Compatibility::is_hpos_enabled() ? 'id' : 'ID';
$order_ids = $wpdb->get_col( "
SELECT DISTINCT orders.{$order_id_col}
FROM {$wpdb->prefix}woocommerce_order_itemmeta AS order_item_meta,
{$wpdb->prefix}woocommerce_order_items AS order_items,
$orders_table AS orders
WHERE order_items.order_item_id = order_item_meta.order_item_id
AND order_items.order_id = orders.{$order_id_col}
AND ( ( order_item_meta.meta_key LIKE '_product_id' AND order_item_meta.meta_value IN ({$product_ids}) )
OR ( order_item_meta.meta_key LIKE '_variation_id' AND order_item_meta.meta_value IN ({$product_ids}) ) )
" );
if ( ! empty( $order_ids ) ) {
// get user IDs for the found orders
$order_ids = Strings_Helper::esc_sql_in_ids( $order_ids );
$user_ids = $wpdb->get_col( "
SELECT posts_meta.meta_value
FROM {$wpdb->prefix}postmeta AS posts_meta
WHERE posts_meta.post_id IN ({$order_ids})
AND posts_meta.meta_key = '_customer_user'
" );
}
}
return ! empty( $user_ids ) ? array_unique( array_map( 'absint', array_values( $user_ids ) ) ) : [];
}
With HPOS, the customer id is saved in the wp_wc_orders
table instead.
The last weeks, I’ve been overwhelmed by work, so no time to work on the blog or write posts. Also a bit depressed by the state of the world. And some family troubles that need time and attention.
Here’s to a positive outcome for all of this.
This post is about the product we are building at Toolsquare.io
The recent/ongoing DDoS1 in the Netherlands impacted our customers, and our own product.
Although we don’t have publicly accessible endpoints on the customers network, we dó have to use their network connection to connect our hardware with our cloud platform. As an IOT solution, this is obvious. We do not supply our own WiFi network or cellular network, in order to reduce costs.
When creating an IoT productivity system, the last thing you want is to get in the way of your user’s productivity. That’s why we implemented an offline mode on our hardware that allows the user to continue to work in case there is no network connectivity. This feature can be enabled on a per-device basis.
As a consequence of the ongoing DDoS attack, network traffic is slow. This leads to long connection times, and response (failure to connect or connection success) takes more time to come in. Some of our hardware units were failing to go into offline mode because of this, and stuck in a reboot loop. Once we figured this out, a fix was quickly deployed and our customers can continue their work in offline mode.
We have a robust test plan with unit tests, integration tests and end to end tests that takes many things that can be simulated into account. After today’s experience we will add slow network testing for our hardware/firmware to this by building a Raspberry Pi network emulation device that can simulate slow network behaviour.
Upgraded the old Fujifilm with a new strap
With WooCommerce 9.4, WooCommerce Brands is getting rolled out to a cohort (5%) of installs.
If you do not want to participate in this change set the option woocommerce_remote_variant_assignment
to a higher value, e.g. 111
<?php
/**
* Ensures that the Brands feature is released initially only to 5% of users.
*
* @return bool
*/
public static function is_enabled() {
$assignment = get_option( 'woocommerce_remote_variant_assignment', false );
if ( false === $assignment ) {
return false;
}
return ( $assignment <= 6 ); // Considering 5% of the 0-120 range.
}
While this is a good feature, it can break your existing brands solution as it did in my case on an existing ecommerce setup.
As a solution, set the new brands permalink to something different from brand
, e.g. brands
.