WPML
סטטוס
נפתר
דווח עבור
WPML Multilingual CMS 4.6.5
נפתר בגרסה
4.6.6
תגיות נושא
Bug

סקירה כללית של התקלה

לאחר עדכון ל־WPML 4.6.5 בהתקנות מולטיסייט של WordPress, תבחין שרשימת המתרגמים, שאמורה להיות זמינה תחת WPML > ניהול תרגום > מתרגמים, ריקה.

פתרון עוקף

אנא ודא שיש לך גיבוי מלא של האתר לפני שתמשיך.


  • פתח את הקובץ …/wp-content/plugins/sitepress-multilingual-cms/classes/user/class-wpml-translation-roles-records.php.

  • חפש את שורה 116.

  • החלף את המתודה: /WPML_Translation_Roles_Records::get_records:
    	private function get_records( $compare, $search = '', $limit = -1 ) {
    		$search = trim( $search );
    
    		$cache_key = md5( (string) wp_json_encode( [ get_class( $this ), $compare, $search, $limit ] ) );
    		$cache     = wpml_get_cache( self::CACHE_GROUP );
    		$found     = false;
    		$results   = $cache->get( $cache_key, $found );
    		if ( $found ) {
    			return $results;
    		}
    
    		$preparedUserQuery = $this->wpdb->prepare(
    			"SELECT u.id FROM {$this->wpdb->prefix}users u INNER JOIN {$this->wpdb->prefix}usermeta c ON c.user_id=u.ID AND CAST(c.meta_key AS BINARY)=%s AND c.meta_value {$compare} %s",
    			"{$this->wpdb->prefix}capabilities",
    			"%" . $this->get_capability() . "%"
    		);
    
    		if ( self::USERS_WITHOUT_CAPABILITY === $compare ) {
    			$required_wp_roles = $this->get_required_wp_roles();
    			foreach( $required_wp_roles as $required_wp_role ) {
    				$preparedUserQuery .= $this->wpdb->prepare( " AND c.meta_value LIKE %s", "%{$required_wp_role}%" );
    			}
    		}
    
    		if ( $search ) {
    			$preparedUserQuery .= $this->wpdb->prepare( " AND (u.user_login LIKE %s OR u.user_nicename LIKE %s OR u.user_email LIKE %s)", "%{$search}%", "%{$search}%", "%{$search}%" );
    		}
    
    		$preparedUserQuery .= ' ORDER BY user_login ASC';
    
    		if ( $limit > 0 ) {
    			$preparedUserQuery .= $this->wpdb->prepare(" LIMIT 0,%d", $limit );
    		}
    
    		$users      = $this->wpdb->get_col( $preparedUserQuery );
    
    		if ( $search && strlen( $search ) > self::MIN_SEARCH_LENGTH && ( $limit <= 0 || count( $users ) < $limit ) ) {
    			$users_from_metas = $this->get_records_from_users_metas( $compare, $search, $limit );
    			$users_with_dupes = array_merge( $users, $users_from_metas );
    			$users            = wpml_array_unique( $users_with_dupes, SORT_REGULAR );
    		}
    
    		$results = array();
    		foreach ( $users as $user_id ) {
    			$user_data = get_userdata( $user_id );
    			if ( $user_data ) {
    				$language_pair_records = new WPML_Language_Pair_Records( $this->wpdb, new WPML_Language_Records( $this->wpdb ) );
    				$language_pairs        = $language_pair_records->get( $user_id );
    
    				$result    = (object) array(
    					'ID'             => $user_data->ID,
    					'full_name'      => trim( $user_data->first_name . ' ' . $user_data->last_name ),
    					'user_login'     => $user_data->user_login,
    					'user_email'     => $user_data->user_email,
    					'display_name'   => $user_data->display_name,
    					'language_pairs' => $language_pairs,
    					'roles'          => $user_data->roles
    				);
    				$results[] = $result;
    			}
    		}
    
    		$cache->set( $cache_key, $results );
    
    		return $results;
    	}

  • ב:
    	private function get_records( $compare, $search = '', $limit = -1 ) {
    		$search = trim( $search );
    
    		$cache_key = md5( (string) wp_json_encode( [ get_class( $this ), $compare, $search, $limit ] ) );
    		$cache     = wpml_get_cache( self::CACHE_GROUP );
    		$found     = false;
    		$results   = $cache->get( $cache_key, $found );
    		if ( $found ) {
    			return $results;
    		}
    
    		$query_args = array(
    			'fields'     => 'ID',
    			'meta_query' => array(
    				array(
    					'key'     => "{$this->wpdb->prefix}capabilities",
    					'value'   => $this->get_capability(),
    					'compare' => $compare,
    				),
    			),
    			'number'     => $limit,
    		);
    
    		if ( 'NOT LIKE' === $compare ) {
    			$required_wp_roles = $this->get_required_wp_roles();
    			if ( $required_wp_roles ) {
    				$query_args['role__in'] = $required_wp_roles;
    			}
    		}
    
    		if ( $search ) {
    			$query_args['search']         = '*' . $search . '*';
    			$query_args['search_columns'] = array( 'user_login', 'user_nicename', 'user_email' );
    		}
    
    		$user_query = $this->user_query_factory->create( $query_args );
    		$users      = $user_query->get_results();
    
    		if ( $search && strlen( $search ) > self::MIN_SEARCH_LENGTH && ( $limit <= 0 || count( $users ) < $limit ) ) {
    			$users_from_metas = $this->get_records_from_users_metas( $compare, $search, $limit );
    			$users_with_dupes = array_merge( $users, $users_from_metas );
    			$users            = wpml_array_unique( $users_with_dupes, SORT_REGULAR );
    		}
    
    		$results = array();
    		foreach ( $users as $user_id ) {
    			$user_data = get_userdata( $user_id );
    			if ( $user_data ) {
    				$language_pair_records = new WPML_Language_Pair_Records( $this->wpdb, new WPML_Language_Records( $this->wpdb ) );
    				$language_pairs        = $language_pair_records->get( $user_id );
    
    				$result    = (object) array(
    					'ID'             => $user_data->ID,
    					'full_name'      => trim( $user_data->first_name . ' ' . $user_data->last_name ),
    					'user_login'     => $user_data->user_login,
    					'user_email'     => $user_data->user_email,
    					'display_name'   => $user_data->display_name,
    					'language_pairs' => $language_pairs,
    					'roles'          => $user_data->roles
    				);
    				$results[] = $result;
    			}
    		}
    
    		$cache->set( $cache_key, $results );
    
    		return $results;
    	}

כל התקלות הידועות →