Widget Logic
Este plugin dá para cada widget um campo de controle extra chamado “Lógica de exibição do widget” que permite que você controle as páginas onde o widget aparecerá. O campo de texto permite que você use as Tags condicionais do WP ou qualquer código PHP.
The configuring and options are in the usual widget admin interface.
BIG UPDATE:
-
Now you can control widget in Gutenberg Widgets editor as well as in Classic Editor. It is just as easy as before but also in gutenberg view.
-
Pre-installed widgets let you add special widget with one click of the mouse. First pre-installed widget is Live Match that let you add widget of one random live football game with real time score updates (teams logos, livescore, minute of the match, tournament name). And more interesting widgets to come!
NOTE ON DEFAULT FUNCTIONS: Widget Logic includes a whitelist of common WordPress conditional tags and safe functions. If you need additional WordPress functions that are not currently whitelisted, please create a topic in our support forum to request them. We regularly add commonly requested functions in new releases.
Configuração
À parte da lógica de exibição dos seus widgets, foram adicionadas três novas opções no rodapé da página de administração dos widgets (veja as imagens de tela).
-
Use a solução ‘wp_reset_query’ — Muitos recursos do WP, bem como os de muitos temas e plugins por aí, podem bagunçar as tags condicionais, como fazer is_home NÃO ser verdadeiro na página de posts. Isso pode frequentemente ser resolvido com uma declaração rápida da função wp_reset_query() logo antes dos widgets serem chamados e essa opção resolve tudo melhor do que ter que editar o código fazendo uma reordenação
-
Lógica de carregamento — Esta opção permite que você configure o ponto no carregamento da página onde a lógica de exibição dos widgets deve ser avaliada. Antes da versão .50 isso acontecia quando o gatilho ‘wp_head’ era acionado, isto é, durante a criação do HEAD do HTML. Muitos temas não chamavam a função wp_head, o que era um problema. A partir da versão .50 isso acontece, por padrão, tão cedo quanto possível, que é logo que o plugin é carregado. Você agora pode especificar estes pontos de ‘carregamento tardio’ (em ordem cronológica):
- depois do carregamento do tema (gatilho after_setup_theme)
- quando todo o PHP for carregado (gatilho do wp_loaded)
- depois que as variáveis da query forem estabelecidas (parse_query) – este é o padrão
- durante o cabeçalho da página (gatilho do wp_head)
Você pode precisar atrasar o carregamento se a sua lógica depende da definição de outras funções, como por exemplo, no arquivo functions.php do tema. Inversamente você pode querer antecipar o carregamento para que a contagem de widgets seja calculada corretamente, por exemplo, para mostrar um layout ou conteúdo alternativo quando uma barra lateral não tem widgets.
-
Não faça cache dos resultados das lógicas de exibição dos widgets — A partir da versão .58 o código da lógica de exibição dos widgets só deveria ser executado uma vez, mas isso pode causar resultados inesperados em alguns temas, então esta opção está aqui para desabilitar esse comportamento. (O verdadeiro/falso do código será avaliado toda vez que o filtro sidebars_widgets for chamado.)
-
Custom PHP Functions — From v.6.0.6 you can use the
widget_logic_allowed_functionsfilter to add custom PHP functions that will be allowed in Widget Logic fields. By default, only WordPress conditional tags and a whitelist of safe functions are available. This filter allows you to extend the functionality and use your own custom functions.To add a custom function, add the following code to your theme’s
functions.phpfile:`add_filter('widget_logic_allowed_functions', 'my_allowed_functions');function my_allowed_functions($functions) { $functions[] = ‘my_custom_function_name‘; return $functions; }`
You can add multiple functions by using one wrapper function:
`add_filter('widget_logic_allowed_functions', 'my_allowed_functions');function my_allowed_functions($functions) { $functions[] = ‘is_special_page’; $functions[] = ‘is_user_verified’; $functions[] = ‘get_sidebar_title’; return $functions; }`
IMPORTANT NOTE ON VARIABLES: Widget Logic is designed to work with simple data types (strings, numbers, booleans). If you need to use complex variables, global state, or conditional logic that depends on many factors, create a custom function in your theme’s
functions.phpfile and call it from Widget Logic:Good approach (in functions.php):
`function is_special_page() { global $post; $special_ids = array(5, 10, 15); $conditions = some_complex_function(); return is_page() && in_array($post->ID, $special_ids) && $conditions;}`
Then in Widget Logic field, simply use:
is_special_page()Less ideal approach (in Widget Logic field): Avoid putting complex logic directly in the Widget Logic field. Keep it simple and let your custom function handle the complexity. This keeps your widget settings clean and maintainable.
Interaction with External Services
Widget Logic uses the external service to obtain up-to-date information about the results of football matches. widgetlogic.org is a source of sports information, that provides a wide range of information about football, including various leagues, tournaments, and championships from around the world.
The functioning of the widgetlogic.org service is based on delivering real-time data about selected matches without the need to refresh the page. This means that data is automatically updated without requiring page reload. This approach ensures users quick and uninterrupted access to the latest sports data without the effort of manually updating information, allowing them to stay informed about ongoing events in real-time.
Escrevendo código lógico
O texto no campo ‘Lógica de exibição do widget’ pode ser um código PHP completo e deve retornar ‘true’ quando você precisa que o widget seja exibido. Se não há ‘return’ no texto, um ‘return’ implícito é adicionado no início e um ‘;’ adicionado no fim. (Isto é apenas para tornar declarações únicas como is_home() mais convenientes.)
O básico
Faça bom uso das tags condicionais do próprio WP. Você pode variar e combinar o código usando:
!(NOT) para reverter a lógica, ex.:!is_home()é VERDADEIRO quando esta NÃO é a página de posts.||(OR) para combinar condições.X OR Yé VERDADEIRO tanto quando X é verdadeiro quanto quando Y é verdadeiro.&&(AND) para tornar condições mais específicas.X AND Yé VERDADEIRO quando ambos X e Y são verdadeiros.
Existem vários ótimos exemplos de código nos fóruns do WP e nos sites WP pela internet. Porém o Codex WP também está cheio de bons exemplos para adaptar, como em Teste se um post está em uma categoria filha.
Exemplos
is_home()— somente na página de posts!is_page('about')— em todo lugar EXCETO nesta ‘página’ WP específica!is_user_logged_in()— exibido quando o usuário não está conectadois_category(array(5,9,10,11))— página de uma categoria que tenha um dos IDs fornecidosis_single() && in_category('baked-goods')— post que está na categoria que possui este slugcurrent_user_can('level_10')— widget somente para administradoresstrpos($_SERVER['HTTP_REFERER'], "google.com")!=false— widget para exibir quando clicado através de uma busca do googleis_category() && custom_function_to_check_the_category()— category page that’s a descendent of category 5custom_function_from_functions_php_to_check_the_page()— WP page that is a child of page 77custom_function_from_functions_php_to_check_the_page_child_of(13)— home page OR the page that’s a child of page 13
