Skip to content

Instantly share code, notes, and snippets.

@dantetesta
Last active September 4, 2023 13:15
Show Gist options
  • Save dantetesta/6fe31d10d8f7882469043e15dbdde6de to your computer and use it in GitHub Desktop.
Save dantetesta/6fe31d10d8f7882469043e15dbdde6de to your computer and use it in GitHub Desktop.
<?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