CAF unanimously backs Gianni Infantino for FIFA Presidency 2027–2031
CAF unanimously backs Gianni Infantino for FIFA Presidency 2027–2031
Read this story aloud
Listen to the clean text version of this article
Ready
3 min listen
Audio reading is not supported on this browser.
The CAF Member Associations unanimously agreed to support Gianni Infantino to be re-elected as President of FIFA for the period 2027-2031,” as seen by CAF
The Confederation of African Football (CAF) has thrown its full weight behind Gianni Infantino, with Member Associations unanimously agreeing to support his re-election as FIFA President for the 2027–2031 term.
The endorsement was reached collectively by members during a meeting on Wednesday, April 29, 2026, in Vancouver, Canada, chaired by CAF President Dr Patrice Motsepe, signalling strong continental backing ahead of the next elective FIFA Congress.
“The Associations unanimously agreed to support Infantino to be re-elected as President of FIFA for the period 2027-2031,” CAF stated following the meeting on the eve of the 76th FIFA Congress.
More To Read
- What the World Cup hydration breaks reveal about who governs men’s football
- CAF opens bidding for 2028, 2032 and 2036 AFCON tournaments
- World Cup of firsts: How 2026 edition in US, Canada and Mexico is rewriting history
- FKF withdraws court case after FIFA, CAF intervene to resolve governance crisis
- Countdown begins as expanded WAFCON 2026 nears kick‑off in Morocco
- Miguel Almiron first player sent off for covering mouth under new FIFA rule
With 54 votes, Africa represents one of the largest voting blocs within world football’s governing structure, making its unified position strategically significant in the build-up to the 2027 election.
Under FIFA statutes introduced in 2016 as part of governance reforms, a president is limited to a maximum of three terms, with each term lasting four years. Infantino was first elected on 26 February 2016, replacing his predecessor mid-cycle.
Infantino’s first mandate ran until 2019, when he was re-elected for a full four-year term. In 2023, at the 73rd FIFA Congress in Kigali, he secured a third mandate by acclamation, extending his leadership through 2027.
Latest Stories
- Somali Embassy hosts Kenya leaders, diplomats for 66th Independence Day celebrations
- UN reviews impact as US ends support for AUSSOM logistics
- Protest victims decry exclusion from government compensation programme despite registration
- Nyaribari Chache MP Zaheer Jhanda summoned as police widen probe into Kisii political violence
A key point of interpretation has surrounded his initial 2016–2019 spell. Because he assumed office during what was technically the remainder of a predecessor’s cycle, several member associations have argued that the first period should not count as a full term under the three-term limit. That reading would make him eligible to seek another four-year mandate from 2027 to 2031.
CAF’s unanimous backing strengthens Infantino’s position significantly. Africa has benefited from expanded World Cup slots, increased development funding through FIFA Forward programmes, and the allocation of major tournaments to the continent during his presidency.
The 2026 FIFA World Cup will feature a record number of African teams following the tournament’s expansion to 48 nations, a reform championed during his tenure.
The next decisive moment will come at the 77th FIFA Congress in 2027, where all 211 member associations will cast their votes to determine the leadership of world football for the next cycle.
Morocco has been selected to host that landmark congress, placing the continent once again at the centre of a pivotal moment in global football governance.
With CAF’s endorsement now secured, Infantino heads toward the 2027 election with consolidated African support, a development that could prove decisive in shaping FIFA’s leadership through to 2031.
Other Topics To Read
Top Stories Today
- Nyaribari Chache MP Zaheer Jhanda summoned as police widen probe into Kisii political violence
- Somali Embassy hosts Kenya leaders, diplomats for 66th Independence Day celebrations
- UN reviews impact as US ends support for AUSSOM logistics
- Protest victims decry exclusion from government compensation programme despite registration
- Machakos Mitumba Market traders suffer heavy losses after midnight fire
- Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killings
`;
}
return “;
}
function commentActionsMarkup(comment, canComment) {
const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
const likeCount = Number(comment.like_count || 0) > 0
? “
: ”;
const likeButton = canComment && comment.status === ‘approved’
? “
: “;
const replyButton = canComment && comment.status === ‘approved’
? “
: ”;
return `
`;
}
function commentMarkup(comment, canComment, isReply = false) {
const pendingBadge = comment.status && comment.status !== ‘approved’
? “
: ”;
const edited = comment.is_edited
? “
: ”;
const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
? `
`
: “;
return `
`;
}
function replyFormMarkup(commentId) {
return `
`;
}
function setNotice(widget, message, type = ‘info’) {
const notice = widget.querySelector(‘[data-role=”notice”]’);
if (!notice) return;
if (!message) {
notice.hidden = true;
notice.textContent = ”;
notice.classList.remove(‘is-error’);
return;
}
notice.hidden = false;
notice.textContent = message;
notice.classList.toggle(‘is-error’, type === ‘error’);
}
function setCount(widget, total) {
const count = widget.querySelector(‘[data-role=”count”]’);
if (!count) return;
const num = Number(total || 0);
count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
}
function openReplyBox(widget, commentId) {
widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
box.hidden = true;
box.innerHTML = ”;
});
const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (!targetItem) return;
const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
if (!replyBox) return;
replyBox.hidden = false;
replyBox.innerHTML = replyFormMarkup(commentId);
const textarea = replyBox.querySelector(‘textarea’);
if (textarea) textarea.focus();
}
function closeReplyBox(container) {
if (!container) return;
container.hidden = true;
container.innerHTML = ”;
}
async function initCommentsWidget(widget) {
const state = {
articleId: Number(widget.dataset.articleId),
loadUrl: widget.dataset.loadUrl,
storeUrl: widget.dataset.storeUrl,
commentsBaseUrl: widget.dataset.commentsBaseUrl,
canComment: widget.dataset.canComment === ‘1’,
page: 1,
perPage: 10,
sort: ‘newest’,
total: 0,
hasMore: false,
busy: false
};
const list = widget.querySelector(‘[data-role=”list”]’);
const loading = widget.querySelector(‘[data-role=”loading”]’);
const empty = widget.querySelector(‘[data-role=”empty”]’);
const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);
async function loadComments(reset = true) {
if (state.busy) return;
state.busy = true;
setNotice(widget, ”);
loading.hidden = false;
if (reset) {
state.page = 1;
list.innerHTML = ”;
empty.hidden = true;
}
try {
const url = new URL(state.loadUrl, window.location.origin);
url.searchParams.set(‘page’, state.page);
url.searchParams.set(‘per_page’, state.perPage);
url.searchParams.set(‘sort’, state.sort);
const response = await requestJson(url.toString(), {
method: ‘GET’,
headers: {
‘Accept’: ‘application/json’,
‘X-Requested-With’: ‘XMLHttpRequest’
}
});
const items = Array.isArray(response.data) ? response.data : [];
const meta = response.meta || {};
state.total = Number(meta.total || 0);
state.hasMore = !!meta.has_more;
setCount(widget, state.total);
if (reset) {
list.innerHTML = ”;
}
if (!items.length && reset) {
empty.hidden = false;
} else {
empty.hidden = true;
list.insertAdjacentHTML(
‘beforeend’,
items.map(item => commentMarkup(item, state.canComment, false)).join(”)
);
}
loadMoreBtn.hidden = !state.hasMore;
} catch (error) {
if (!list.children.length) {
empty.hidden = false;
empty.textContent = ‘Unable to load comments right now.’;
}
setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
} finally {
loading.hidden = true;
state.busy = false;
}
}
async function submitTopLevelComment(form) {
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘[data-role=”submit-comment”]’);
if (!textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(state.storeUrl, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
textarea.value = ”;
if (response?.data) {
list.insertAdjacentHTML(
‘afterbegin’,
commentMarkup(response.data, state.canComment, false)
);
empty.hidden = true;
if ((response.data.status || ”) === ‘approved’) {
state.total += 1;
setCount(widget, state.total);
}
}
setNotice(widget, response.message || ‘Comment posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post comment’;
}
}
}
async function submitReply(form) {
const commentId = Number(form.dataset.commentId || 0);
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘.ev-comments__reply-submit’);
if (!commentId || !textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
if (response?.data) {
const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (parentItem) {
const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
if (repliesWrap) {
repliesWrap.insertAdjacentHTML(
‘beforeend’,
commentMarkup(response.data, state.canComment, true)
);
}
}
}
closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
setNotice(widget, response.message || ‘Reply posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post reply’;
}
}
}
async function toggleLike(button) {
const commentId = Number(button.dataset.commentId || 0);
if (!commentId) return;
const originalHtml = button.innerHTML;
try {
button.disabled = true;
button.innerHTML = ‘Working…’;
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({})
});
const liked = !!response?.data?.liked;
const likeCount = Number(response?.data?.like_count || 0);
button.classList.toggle(‘is-liked’, liked);
button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
} catch (error) {
button.innerHTML = originalHtml;
setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
} finally {
button.disabled = false;
}
}
if (composerForm) {
composerForm.addEventListener(‘submit’, function (e) {
e.preventDefault();
submitTopLevelComment(composerForm);
});
}
if (sortSelect) {
sortSelect.addEventListener(‘change’, function () {
state.sort = this.value || ‘newest’;
loadComments(true);
});
}
if (loadMoreBtn) {
loadMoreBtn.addEventListener(‘click’, function () {
if (state.busy || !state.hasMore) return;
state.page += 1;
loadComments(false);
});
}
widget.addEventListener(‘click’, function (e) {
const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
if (likeBtn) {
e.preventDefault();
toggleLike(likeBtn);
return;
}
const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
if (replyBtn) {
e.preventDefault();
openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
return;
}
const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
if (cancelReplyBtn) {
e.preventDefault();
closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
}
});
widget.addEventListener(‘submit’, function (e) {
const replyForm = e.target.closest(‘.ev-comments__reply-form’);
if (replyForm) {
e.preventDefault();
submitReply(replyForm);
}
});
loadComments(true);
}
document.addEventListener(‘DOMContentLoaded’, function () {
document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
});
})();
Trending
Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killingsNews
|Lucy Mumbi
|2 hours ago
Nyaribari Chache MP Zaheer Jhanda summoned as police widen probe into Kisii political violenceNews
|Lucy Mumbi
|1 hour ago
UN reviews impact as US ends support for AUSSOM logisticsSomalia
|Abdirahman Khalif
|49 minutes ago
Serena Williams withdraws from Wimbledon doubles after knee injury, ending Venus reunion plansSports
|Bashir Mbuthia
|13 hours ago
Mbappé fires France past Paraguay into World Cup quarter-finalsSports
|Erick Kariuki
|5 hours ago
Cherotich, Odira shine as Kenya dominates Prefontaine Classic despite rare Kipyegon defeatSports
|Erick Kariuki
|5 hours ago
Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspectsNews
|Lucy Mumbi
|4 hours ago
Protest victims decry exclusion from government compensation programme despite registrationNews
|Lucy Mumbi
|1 hour ago
Messi makes history as Argentina survive Cape Verde’s unforgettable World Cup fightNews
|Erick Kariuki
|1 day ago
Government announces final repatriation flight for Kenyans in South AfricaNews
|Rachael Mutabasi
|1 day ago
