Last active
September 4, 2023 13:15
-
-
Save dantetesta/6fe31d10d8f7882469043e15dbdde6de to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/*** | |
Autor: Dante Testa | |
Date: 04/09/2023 | |
Descrição e Documentação do Script "Show Weekmenu Shortcode" | |
O shortcode `show_weekmenu` foi desenvolvido para permitir a exibição de uma imagem com base no número da semana atual do mês no WordPress. Ele foi projetado para trabalhar com campos personalizados de opções, onde as imagens podem ser armazenadas como IDs de mídia ou URLs. | |
Como usar: | |
1. Adicione o script ao seu site WordPress. Se você estiver usando um plugin como "Code Snippets", você pode simplesmente adicionar o código lá e ativá-lo. | |
2. Use o shortcode `[show_weekmenu]` em seus posts, páginas ou widgets. | |
Parâmetros do Shortcode: | |
- `option`: (obrigatório) Nome da opção onde os campos personalizados estão armazenados. | |
- `metafields`: (obrigatório) Campos personalizados separados por vírgula que contêm os IDs de mídia ou URLs das imagens. | |
- `force_week`: (opcional) Se você deseja forçar uma semana específica, forneça o número da semana aqui (1-5). | |
Exemplos de Uso: | |
1. Exibindo uma imagem com base na semana atual do mês: | |
[show_weekmenu option="slug_do_options_pages" metafields="img1, img2, img3, img4, img5"] | |
2. Exibindo uma imagem forçando a segunda semana, por exemplo: | |
[show_weekmenu option="slug_do_options_pages" metafields="img1, img2, img3, img4, img5" force_week="2"] | |
Considerações Adicionais: | |
- Se o campo personalizado contiver um ID numérico, o script tentará buscar a URL da imagem associada a esse ID. | |
- Se o campo personalizado contiver uma URL, ele será usado diretamente. | |
- Se `force_week` não for fornecido, o script calculará automaticamente a semana atual do mês e usará essa informação para determinar qual imagem mostrar. | |
***/ | |
function show_weekmenu_shortcode($atts) | |
{ | |
$a = shortcode_atts(array( | |
'option' => '', | |
'metafields' => '', | |
'force_week' => null // adicionado aqui | |
), $atts); | |
$option = $a['option']; | |
$metafields = explode(',', $a['metafields']); | |
$images = []; | |
foreach ($metafields as $field) { | |
$field = trim($field); | |
$value = get_option($option)[$field]; | |
if (is_numeric($value)) { | |
$imageUrl = wp_get_attachment_image_src($value, 'full')[0]; | |
} else { | |
$imageUrl = $value; | |
} | |
$images[] = $imageUrl; | |
} | |
// Passando o valor force_week para getWeekNumber | |
$currentWeek = getWeekNumber($a['force_week']); | |
if(isset($images[$currentWeek-1])){ | |
return '<img src="'.$images[$currentWeek-1].'" />'; | |
} | |
return ''; | |
} | |
function getWeekNumber($forcedWeek = null) | |
{ | |
if ($forcedWeek !== null) { | |
return $forcedWeek; | |
} | |
$weekOfYear = intval(date('W')); | |
$weekOfMonth = $weekOfYear - intval(date('W', strtotime(date('Y-m-01')))) + 1; | |
if(date('n') !== intval(date('n', strtotime(date('Y-m-'.$weekOfMonth.' Monday'))))){ | |
if($weekOfMonth === 1){ | |
$weekOfMonth = intval(date('W', strtotime(date('Y-m-t')))) - intval(date('W', strtotime(date('Y-m-01')))) + 2; | |
} else { | |
$weekOfMonth--; | |
} | |
} | |
return $weekOfMonth; | |
} | |
add_shortcode('show_weekmenu', 'show_weekmenu_shortcode'); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment