Как автоматически установить флажок Отключить ограничения членства в Woocommerce при создании нового поста в блоге

Когда новое сообщение Wordpress создается с использованием категории сообщений «A» (или «B» или «C»), мне нужно автоматически установить флажок Woocommerce-Memberships Отключить ограничения с помощью PHP-хука. Это позволит всем зрителям неограниченный доступ к просмотру публикации.

изображение флажка[1]

Я попытался добавить действие в хук «save_post», чтобы добавить значение «_wc_memberships_force_public» «yes» в таблицу {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;
             }
         }
}

Я ожидаю, что все зрители будут иметь неограниченный доступ к просмотру содержимого публикации независимо от того, установлен ли этот флажок автоматически или вручную. Вместо этого он работает только при установке флажка вручную.


person ztron    schedule 21.06.2019    source источник


Ответы (1)


Вместо использования 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

person Sébastien Grégoire    schedule 19.01.2020