Bỏ qua điều hướng

Open

Topic Tags: Compatibility

Overview of the issue

When creating an event with a registration limit with WP Event Manager and its WP Event Manager – Registrations addon, the registration limit is not synchronized between languages.

Workaround

Please, make sure of having a full site backup of your site before proceeding.

  • Open …/wp-content/plugins/wp-event-manager-registrations/wp-event-manager-registrations-functions.php file.
  • Look for line 497.
  • Replace:
    if(!function_exists('get_event_registration_count')) {
        /**
         * Get number of registrations for a event
         * @param  int $event_id
         * @return int
         */
        function get_event_registration_count($event_id) {
            return sizeof(get_posts(array(
                'post_type'      => 'event_registration',
                'post_status'    => array_merge(array_keys(get_event_registration_statuses()), array('publish')),
                'posts_per_page' => -1,
                'fields'         => 'ids',
                'post_parent'    => $event_id
            )));
        }
    }
    
  • With:
    if(!function_exists('get_event_registration_count')) {
        /**
         * Get number of registrations for a event
         * @param  int $event_id
         * @return int
         */
        function get_event_registration_count($event_id) {
            
            // WPML workaround for compsupp-7562 - Part I
            $translations = apply_filters( 'wpml_get_element_translations', null, $event_id, 'post_' . get_post_type($event_id) );
            
            // Extract the IDs of the translated posts
            $event_ids = array_map(function($translation) {
                return $translation->element_id;
            }, $translations);
        
            // Get event registrations for all translations
            return sizeof(get_posts(array(
                'post_type'      => 'event_registration',
                'post_status'    => array_merge(array_keys(get_event_registration_statuses()), array('publish')),
                'posts_per_page' => -1,
                'fields'         => 'ids',
                'post_parent__in' => $event_ids // Get all registrations for the event IDs
            )));
        }
        
    }
    
  • Then, look for line 595.
  • Replace:
    if(!function_exists('user_has_registered_for_event')) {
        /**
         * See if a user has already appled for a event
         * @param  int $user_id, $event_id
         * @return int
         */
        function user_has_registered_for_event($user_id, $event_id) {
            if(!$user_id) {
                return false;
            }
            return sizeof(get_posts(array(
                'post_type'      => 'event_registration',
                'post_status'    => array_merge(array_keys(get_event_registration_statuses()), array('publish')),
                'posts_per_page' => 1,
                'fields'         => 'ids',
                'post_parent'    => $event_id,
                'meta_query'     => array(
                    array(
                        'key' => '_attendee_user_id',
                        'value' => absint($user_id)
                    )
                )
            )));
        }
    }
    
  • With:
    if(!function_exists('user_has_registered_for_event')) {
        /**
         * See if a user has already appled for a event
         * @param  int $user_id, $event_id
         * @return int
         */
        function user_has_registered_for_event($user_id, $event_id) {
            if(!$user_id) {
                return false;
            }
    
            // WPML Workaround for compsupp-7562 - Part II
            $translations = apply_filters( 'wpml_get_element_translations', null, $event_id, 'post_' . get_post_type($event_id) );
            
            // Extract the IDs of the translated posts
            $event_ids = array_map(function($translation) {
                return $translation->element_id;
            }, $translations);
    
            // Check if the user is registered for any translation of the event
            return sizeof(get_posts(array(
                'post_type'      => 'event_registration',
                'post_status'    => array_merge(array_keys(get_event_registration_statuses()), array('publish')),
                'posts_per_page' => 1,
                'fields'         => 'ids',
                'post_parent__in' => $event_ids, // Check all event translations
                'meta_query'     => array(
                    array(
                        'key'   => '_attendee_user_id',
                        'value' => absint($user_id)
                    )
                )
            ))) > 0;
        }
    
    }
    

Để lại phản hồi

Vui lòng bám sát chủ đề và tôn trọng người khác. Nếu bạn cần trợ giúp với các vấn đề không liên quan đến bài đăng này, hãy sử dụng Diễn đàn Hỗ trợ của chúng tôi để bắt đầu trò chuyện hoặc gửi yêu cầu hỗ trợ.

Bạn có thể sử dụng các thẻ sau:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>