php - 创建新博客文章时如何自动检查 Woocommerce 会员资格“禁用限制”复选框
问题描述
当使用帖子类别“A”(或“B”或“C”)创建新的 Wordpress 帖子时,我需要使用 PHP 挂钩自动检查 Woocommerce-Memberships禁用限制复选框。这将允许所有查看者不受限制地查看帖子。
复选框图片[1]
我尝试向“save_post”挂钩添加一个操作,将“yes”的“_wc_memberships_force_public”值添加到 {wp_prefix}_post_meta 表中,因此复选框将显示为选中,但是,在查看帖子时它仍然是受限制的。当我删除操作(通过从我的 functions.php 文件中将其注释掉)并在保存帖子之前手动选中禁用限制复选框时,可以无限制地查看帖子(如预期的那样)。
add_action( 'save_post', 'action_save_post_force_public', 99, 3);
function action_save_post_force_public($post_id, $post, $is_update){
$already_forced = get_post_meta( $post_id, '_wc_memberships_force_public', $single=true );
if ( 'yes' === $already_forced ){ return; }
$categories = get_the_category( $post_id );
if ( empty( $categories ) ){ return; }
$force_public_slugs = array('A', 'B', 'C');
foreach ( $categories as $term ){
if ( in_array( $term->slug, $force_public_slugs ) ){
update_post_meta( $post_id, '_wc_memberships_force_public', 'yes' );
break;
}
}
}
我希望所有查看者都可以不受限制地查看帖子内容,无论此框是自动选中还是手动选中。相反,它仅在手动选中该框时才有效。
解决方案
而不是使用update_post_meta( $post_id, '_wc_memberships_force_public', 'yes' );
,试试这个:
// Disable post restrictions (Woocommerce Membership)
$wc_membership = \WC_Memberships::instance();
$wc_membership->get_restrictions_instance()->set_content_public($post);
这对我来说很有效 ;)
您可以在文件中找到这段代码的示例woocommerce-memberships/includes/admin/class-wc-memberships-admin.php
推荐阅读
- android - Firebase 规则在设置为 true 时显示权限错误
- database - 带有电子表格/数据库、自动完成、自动填充和触发操作的在线表单(或其他解决方法)
- c - 十进制到二进制的转换在某些情况下不起作用
- python - 打印字符串时如何开始新的一行代码
- angular - 使用 ControlContainer 创建可重用的 matInput 组件时,“无名称的表单控件的值访问器”
- c++ - 使用 offsetof 是否保证正确?
- javafx - 使用 OpenPDF、JavaFX 和 GraphicsContext 创建 PDF?
- python - tweepy.Cursor 将不相关的搜索结果返回到我选择的查询
- node.js - 使用 axios 请求时,仍然没有出现“Access-Control-Allow-Origin”标头
- neo4j - Neo4j 版本。4.1.1 密码语法错误“使用定期提交”