Manuellement, c'est simple

Dans l'éditeur d'article, il y a un bloc spécifique — "Content Restriction" — pour gérer les limitations d'accès. On y retrouve toutes les règles qui gèrent l'accès à l'article. Pour désactiver ces limitations, il suffit de cocher la checkbox "Disable restrictions".

Mais quand il faut le faire programmatiquement (dans un cron par exemple), c'est une autre paire de manches.

Programmatiquement, c'est non-documenté

Sincèrement, j'ai vraiment galéré pour trouver la solution à mon problème. Lorsqu'on sort des problématiques basiques de Woocommerce, sa documentation est inutile et dans mon cas, StackOverflow était vide…

En faisant du Reverse Engineering, je suis d'abord parti sur la piste "j'ai juste à mettre à jour la métadonnée _wc_memberships_force_public". Visuellement, ça marche puisque la checkbox "Disable restrictions" est cochée, mais l'article n'est pas public…

Ensuite, par hasard, je suis tombé sur un bout de code du plugin Woocommerce Membership qui m'a sauvé la vie (presque). Du coup, sans plus de suspense, voici le code à mettre dans votre plugin pour rendre public un article protégé par Woocommerce Membership :

// Dans un CRON par exemple
// ...
$wc_membership = \WC_Memberships::instance();
$wc_membership->get_restrictions_instance()->set_content_public($post);

Vous pouvez utiliser unset_content_public() pour que l'article ne soit plus public et soit à nouveau géré par les règles du plugin.

Bien à vous !

PS : ce code marche sur Woocommerce Membership jusqu'à la version 1.16. Je ne garanti par les prochaines versions.