WPML
状态
等待作者
相关插件/主题
WP Event Manager
主题标签
Compatibility

问题概述

使用 WP Event Manager 及其 WP Event Manager – Registrations 附加组件创建带有注册限制的事件时,注册限制在不同语言之间不同步。

临时解决方法

在继续操作之前,请确保对您的站点进行了完整站点备份


  • 打开 …/wp-content/plugins/wp-event-manager-registrations/wp-event-manager-registrations-functions.php 文件。

  • 找到第 497 行。

  • 将:
    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
            )));
        }
    }


  • 替换为:
    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
            $element_type = 'post_' . get_post_type( $event_id );
            $trid = apply_filters( 'wpml_element_trid', null, $event_id, $element_type );
            $translations = apply_filters( 'wpml_get_element_translations', null, $trid , $element_type );
            
            // 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
            )));
        }
        
    }


  • 然后,找到第 595 行。

  • 将:
    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)
                    )
                )
            )));
        }
    }


  • 替换为:
    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
            $element_type = 'post_' . get_post_type( $event_id );
            $trid = apply_filters( 'wpml_element_trid', null, $event_id, $element_type );
            $translations = apply_filters( 'wpml_get_element_translations', null, $trid , $element_type );
            
            // 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;
        }
    
    }

所有已知问题 →