Skip to content

Instantly share code, notes, and snippets.

@chrdesigner
Created October 8, 2024 14:46
Show Gist options
  • Save chrdesigner/1248bac1a89b1d6a7af2c37aa336123f to your computer and use it in GitHub Desktop.
Save chrdesigner/1248bac1a89b1d6a7af2c37aa336123f to your computer and use it in GitHub Desktop.
Função onde eu aplico um select de idioma para exibir somente o meus posts referente ao idioma selecionado, o mesmo é aplicado somente em "post, page ou portfolio"
<?php
/**
* Filtra os posts por idioma no painel administrativo.
*
* Apenas exibe posts em um determinado idioma, caso o plugin Polylang esteja
* ativo e o tipo de post seja post, page ou portfolio.
*
* O idioma atual pode ser passado como par metro GET 'idioma'.
*
* @since 1.0.0
*/
function filtrar_posts_por_idioma_no_admin() {
global $typenow;
if (function_exists('pll_languages_list') && in_array($typenow, ['post', 'page', 'portfolio'])) {
$selected = isset($_GET['idioma']) ? $_GET['idioma'] : pll_default_language();
$languages = pll_languages_list(['fields' => 'slug']);
echo '<select name="idioma" id="idioma">';
echo '<option value="">' . __('Todos os idiomas', 'text-domain') . '</option>';
foreach ($languages as $language) {
$flag_url = pll_the_languages(['raw' => 1])[$language]['flag'];
printf(
'<option value="%s" data-flag="%s" %s>%s</option>',
esc_attr($language),
esc_url($flag_url),
selected($selected, $language, false),
esc_html(pll_the_languages(['raw' => 1])[$language]['name'])
);
}
echo '</select>';
}
}
add_action('restrict_manage_posts', 'filtrar_posts_por_idioma_no_admin');
/**
* Filtra os posts por idioma na query do painel administrativo.
*
* Atribui o idioma atual para a query do painel administrativo
* para que os posts sejam filtrados pelo idioma selecionado.
*
* @since 1.0.0
*
* @param \WP_Query $query A query do painel administrativo.
*/
function filtrar_posts_por_idioma_na_query_admin($query) {
global $typenow;
if (is_admin() && $query->is_main_query() && in_array($typenow, ['post', 'page', 'portfolio'])) {
if (isset($_GET['idioma']) && $_GET['idioma']) {
$query->set('lang', $_GET['idioma']);
} elseif (isset($_GET['idioma']) && $_GET['idioma'] === '') {
$query->set('lang', '');
} else {
$query->set('lang', pll_default_language());
}
}
}
add_action('pre_get_posts', 'filtrar_posts_por_idioma_na_query_admin');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment