0

当使用帖子类别“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;
             }
         }
}

我希望所有查看者都可以不受限制地查看帖子内容,无论此框是自动选中还是手动选中。相反,它仅在手动选中该框时才有效。

4

1 回答 1

0

而不是使用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

于 2020-01-19T16:53:49.237 回答