Exibição da Data ou do Ano Atual em um Tema de Blocos no WordPress

Exibição da Data ou do Ano Atual em um Tema de Blocos no WordPress

Compartilhe

Exibição da Data ou do Ano Atual – Ao criar um tema de blocos no WordPress, muitas vezes surge a necessidade de exibir informações dinâmicas, como a data ou apenas o ano atual, diretamente no editor ou no site final. No entanto, o formato tradicional de temas baseados em PHP não é aplicado diretamente aos temas baseados em blocos e no theme.json, exigindo abordagens específicas.

Neste guia, exploramos as melhores práticas para adicionar essa funcionalidade, abrangendo diferentes cenários e níveis de personalização. As soluções incluem:

Exibição da Data ou do Ano Atual

  1. Shortcodes: Uma abordagem mais simples, que pode ser usada em qualquer parte do conteúdo para a exibição da data ou do ano atual no formato desejado.
  2. Blocos Dinâmicos: Perfeitos para temas modernos, permitem integrar conteúdo dinâmico, como a data ou o ano atual, diretamente no editor de blocos.
  3. Blocos HTML no Editor: Para casos onde um ajuste rápido é necessário, utilizando códigos PHP diretamente em blocos personalizados.
  4. Configuração via theme.json: Apesar de limitada para elementos dinâmicos, combinada com um bloco dinâmico, esta abordagem mantém o tema alinhado com a estrutura dos temas de blocos.

Com essas soluções, é possível garantir que a data ou o ano atual sejam exibidos corretamente, seja para fins de design, informações de copyright, ou para qualquer outra necessidade. Vamos detalhar cada método para que você escolha o que melhor se adapta ao seu projeto!

Para exibir a data atual global em vez da data de publicação do post, você precisará personalizar o bloco ou usar um código PHP no WordPress. Abaixo estão duas abordagens possíveis:


1. Usar um Shortcode para exibir a data atual

Você pode criar um shortcode que retorna a data atual e inseri-lo no lugar do bloco de data do post:

Código para o Shortcode:

Adicione o seguinte código ao arquivo functions.php do seu tema ou a um plugin personalizado:

function exibir_data_atual() {
    return date_i18n( get_option( 'date_format' ) );
}
add_shortcode( 'data_atual', 'exibir_data_atual' );

Como usar:

  • Escolha o bloco “Shortcode” na aba blocos do editor.
Escolha o bloco “Shortcode” na aba blocos do editor.
Escolha o bloco “Shortcode” na aba blocos do editor.
  • Insira o shortcode [data_atual] no conteúdo.
Insira o shortcode [data_atual] no conteúdo.
Insira o shortcode [data_atual] no conteúdo.

Isso exibirá a data atual no formato definido nas configurações de data do WordPress.

Isso exibirá a data atual no formato definido nas configurações de data do WordPress.
Isso exibirá a data atual no formato definido nas configurações de data do WordPress.

2. Customizar o bloco diretamente com um código dinâmico

Aqui está um exemplo de código para criar um bloco dinâmico no editor Gutenberg que exibe a data atual. O bloco utiliza PHP para renderizar dinamicamente a data no frontend e JavaScript para registrá-lo no editor.

Exemplo de um bloco dinâmico:

Crie uma pasta dentro da pasta do seu tema.

/meu-tema/

|-- /data-atual/

|    |-- bloco-data-atual.php

|    |-- bloco.js

Crie e adicione o seguinte código ao arquivo bloco-data-atual.php:

<?php

// Registra o bloco dinâmico

function register_dynamic_date_block() {

    // Registra o script do bloco

    wp_register_script(

        'dynamic-date-block-editor',

        get_template_directory_uri() . '/data-atual/block.js', // Atualize o caminho conforme necessário

        array('wp-blocks', 'wp-element', 'wp-editor', 'wp-components'),

        filemtime(get_template_directory() . '/data-atual/block.js')

    );

    // Registra o bloco com renderização dinâmica

    register_block_type('custom/dynamic-date', array(

        'editor_script'   => 'dynamic-date-block-editor',

        'render_callback' => 'render_dynamic_date_block',

    ));

}

add_action('init', 'register_dynamic_date_block');

// Função de renderização dinâmica do bloco

function render_dynamic_date_block() {

    return '<div class="dynamic-date-block">' . date_i18n(get_option('date_format')) . '</div>';

}

Em seguida crie o segundo arquivo, bloco.js e adicione o seguinte código:

const { registerBlockType } = wp.blocks;

registerBlockType('custom/dynamic-date', {

    title: 'Data Atual',

    icon: 'calendar',

    category: 'widgets',

    edit: () => wp.element.createElement('p', null, 'Data atual: será exibida no frontend, não pode ser editada aqui.'),

    save: () => null, // O conteúdo é renderizado dinamicamente via PHP

});

Finalmente, abra o arquivo functions.php do seu tema e cole o trecho de código abaixo:

require get_template_directory() . '/data-atual/bloco-data-atual.php';

Como usar:

  1. Escolha o bloco “Data Atual” na aba blocos do editor.
Escolha o bloco “Data Atual” na aba blocos do editor.
Escolha o bloco “Data Atual” na aba blocos do editor.
  1. Ele exibirá automaticamente a data atual no formato global.
Ele exibirá automaticamente a data atual no formato global.
Ele exibirá automaticamente a data atual no formato global.

Exibindo a renderização do texto gerado pelo bloco data atual.

Exibindo a renderização do texto gerado pelo bloco data atual.
Exibindo a renderização do texto gerado pelo bloco data atual.

3. Usar um bloco de texto com código embutido no editor

Se você prefere simplicidade e não quer mexer em PHP, basta inserir um bloco de texto com o shortcode PHP embutido (se seu WordPress permitir executar PHP em blocos).

<?php echo date_i18n( get_option( 'date_format' ) ); ?>

4. Para temas de blocos com suporte ao arquivo theme.json

Para temas baseados em blocos e com suporte ao arquivo theme.json, você pode criar um bloco dinâmico ou usar um filtro de blocos existente. Como o arquivo theme.json não permite diretamente a inserção de PHP, você precisará criar um bloco personalizado que exiba a data atual, essa é uma abordagem bem mais complexa, pois você tem que ter pelo menos um pouco de noção de .JSON e Javascript. Aqui está o passo a passo correto para temas de blocos:

1. Criar um Bloco Dinâmico para Data Atual

Blocos dinâmicos são adequados para temas de blocos (block themes) e permitem exibir conteúdo gerado dinamicamente, como a data atual.

a) Crie um diretório para o bloco

No seu tema, adicione a estrutura:

Nome-do-tema/

├── blocos/

|   |--bloco-data-atual.php

│   ├── data-atual/

│   │   ├── block.json

│   │   ├── render.php

│   │   ├── index.js (opcional, se precisar de JavaScript)

b) Registrar o bloco

Crie o arquivo bloco-data-atual.php dentro da pasta blocos, este é responsável por registrar o bloco data atual no editor gutenberg do Wordprress. Copie e cole o código abaixo:

<?php

/**

 * Bloco Dinâmico para WordPress

 *

 * Copyright (c) 2024 Wilson66Blog

 * Este código foi criado como parte de um exemplo funcional para blocos dinâmicos no WordPress.

 * Você pode usar e modificar este código conforme necessário, respeitando os créditos ao autor.

 */

if ( ! defined( 'ABSPATH' ) ) {

    exit; // Exit if accessed directly.

}

/**

 * Registers the block using the metadata loaded from the `block.json` file.

 */

function externo_bloco_data_atual_init() {

    register_block_type( __DIR__ . '/build' );

}

add_action( 'init', 'externo_bloco_data_atual_init' );

c) Configure o block.json

O block.json é usado para registrar o bloco no WordPress e contém metadados. O arquivo block.json define o bloco. Adicione o seguinte conteúdo:

{

  "apiVersion": 3,

  "name": "custom-namespace/bloco-data-atual",

  "version": "0.1.0",

  "title": "Data Aual",

  "category": "widgets",

  "description": "Exiba a data atual do seu site.",

  "example": {},

  "attributes": {

    "fallbackCurrentYear": {

      "type": "string"

    },

    "showStartingYear": {

      "type": "boolean"

    },

    "startingYear": {

      "type": "string"

    }

  },

  "supports": {

    "color": {

      "background": false,

      "text": true

    },

    "html": false,

    "typography": {

      "fontSize": true

    }

  },

  "textdomain": "bloco-data-atual",

  "editorScript": "file:./index.js",

  "render": "file:./render.php"

}

d) Crie o arquivo render.php

Esse arquivo define como o conteúdo dinâmico será renderizado no front-end. Este arquivo será responsável por gerar a data atual:

<?php

/**

 * Bloco Dinâmico para WordPress

 *

 * Copyright (c) 2024 Wilson66Blog

 * Este código foi criado como parte de um exemplo funcional para blocos dinâmicos no WordPress.

 * Você pode usar e modificar este código conforme necessário, respeitando os créditos ao autor.

 */

// Obtenha o ano  atual.e a data atual

//$current_year = date_i18n( 'Y' );

$current_year = date_i18n( get_option( 'date_format' ) );

// Determina qual conteúdo exibir.

if ( isset( $attributes['fallbackCurrentYear'] ) && $attributes['fallbackCurrentYear'] === $current_year ) {

    // Se o ano atual for o mesmo do fallback, então use o conteúdo do bloco salvo no banco de dados (pela função save.js).

    $block_content = $content;

} else {

    // Se o ano atual for diferente do fallback, então renderize o conteúdo do bloco atualizado.

    if ( ! empty( $attributes['startingYear'] ) && ! empty( $attributes['showStartingYear'] ) ) {

        $display_date = $attributes['startingYear'] . ' a ' . $current_year;

    } else {

        $display_date = $current_year;

    }

    $block_content = '<p ' . get_block_wrapper_attributes() . '>' . esc_html( $display_date ) . '</p>';

}

echo wp_kses_post( $block_content, );

e) Renderiza o bloco no backend

Este arquivo é responsável por mostrar o bloco e suas configurações no editor, crie o arquivo index.js e cole o código abaixo:

!function() {

    "use strict";

    var e = window.wp.element;

    var t = window.wp.blocks;

    var r = window.wp.i18n;

    var n = window.wp.blockEditor;

    var a = window.wp.components;

    var o = window.React;

    var l = JSON.parse('{"u2":"custom-namespace/bloco-data-atual"}');

    const c = (0, e.createElement)(

        "svg",

        {

            viewBox: "0 0 24 24",

            xmlns: "http://www.w3.org/2000/svg",

            "aria-hidden": "true",

            focusable: "false"

        },

        (0, e.createElement)("path", {

            d: "M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm.5 16c0 .3-.2.5-.5.5H5c-.3 0-.5-.2-.5-.5V7h15v12zM9 10H7v2h2v-2zm0 4H7v2h2v-2zm4-4h-2v2h2v-2zm4 0h-2v2h2v-2zm-4 4h-2v2h2v-2zm4 0h-2v2h2v-2z"

        })

    );

    (0, t.registerBlockType)(l.u2, {

        icon: c,

        edit: function({ attributes: t, setAttributes: l }) {

            const { fallbackCurrentYear: c, showStartingYear: i, startingYear: s } = t;

            const w = (new Date).getFullYear().toString();

            let h;

            (0, o.useEffect)(() => {

                if (w !== c) {

                    l({ fallbackCurrentYear: w });

                }

            }, [w, c, l]);

            h = i && s ? `${s}–${w}` : w;

            return (

                (0, e.createElement)(

                    e.Fragment,

                    null,

                    (0, e.createElement)(

                        n.InspectorControls,

                        null,

                        (0, e.createElement)(

                            a.PanelBody,

                            { title: (0, r.__)("Configurações", "bloco-data-atual") },

                            (0, e.createElement)(a.ToggleControl, {

                                checked: i,

                                label: (0, r.__)("Mostrar ano inicial", "bloco-data-atual"),

                                onChange: () => l({ showStartingYear: !i })

                            }),

                            i && (0, e.createElement)(a.TextControl, {

                                label: (0, r.__)("Ano de início", "bloco-data-atual"),

                                value: s,

                                onChange: e => l({ startingYear: e })

                            })

                        )

                    ),

                    (0, e.createElement)(

                        "p",

                        { ...(0, n.useBlockProps)() },

                        h

                    )

                )

            );

        },

        save: function({ attributes: t }) {

            const { fallbackCurrentYear: r, showStartingYear: a, startingYear: o } = t;

            if (!r) return null;

            let l = a && o ? `${o}–${r}` : r;

            return (0, e.createElement)(

                "p",

                { ...n.useBlockProps.save() },

                l

            );

        }

    });

}();

f) Registre o bloco

Adicione o seguinte código ao arquivo functions.php do seu tema:

require get_template_directory() . '/nova-data-atual/bloco-data-atual.php';

g) Usando o Bloco no Editor

  • Após registrar o bloco, ele aparecerá na categoria “Widgets” com o nome “Data Atual”.
  • Arraste e solte no editor onde você deseja exibir a data atual.  Esse código tem a opção para você definir uma data de início.
Arraste e solte no editor onde você deseja exibir a data atual.
Arraste e solte no editor onde você deseja exibir a data atual.

Resultado no frontend do site:

Resultado no frontend do site
Resultado no frontend do site

2. Configurar para JSON sem criar bloco

Se você deseja usar apenas configuração via JSON e os blocos existentes, infelizmente o theme.json sozinho não suporta diretamente PHP ou JavaScript dinâmico. Nesse caso, use o Bloco de Código Personalizado no editor e adicione:

<!-- wp:html -->

<?php echo date_i18n( get_option( 'date_format' ) ); ?>

<!-- /wp:html -->

Isso exibe a data atual diretamente.


Exibir somente o ano atual

Para exibir somente o ano atual em um tema baseado em blocos (block theme), você pode ajustar o bloco dinâmico ou usar um atalho no PHP para retornar apenas o ano.

1. Atualizando o Bloco Dinâmico para Mostrar Apenas o Ano

a) Modifique o render.php do bloco dinâmico:

Se você já criou o bloco dinâmico, edite o arquivo render.php para exibir apenas o ano, remova o comentário da primeira linha e comente a segunda linha:

// Obtenha o ano  atual.e a data atual

$current_year = date_i18n( 'Y' );

// $current_year = date_i18n( get_option( 'date_format' ) );

Este código usa o formato ‘Y’ para exibir o ano atual (exemplo: 2024).


2. Adicionar o Ano Diretamente no Tema via Shortcode

Se preferir usar um shortcode para exibir apenas o ano, crie um no functions.php:

function shortcode_ano_atual() {

    return date_i18n( 'Y' );

}

add_shortcode( 'ano_atual', 'shortcode_ano_atual' );

Como usar:

  1. Adicione um bloco de sohortcode ou de texto no editor.
  2. Insira [ano_atual] no bloco para exibir o ano.

Mostrando apenas o ano atual, essa abordagem geralmente é usada para adicionar o copyright:

Mostrando apenas o ano atual
Mostrando apenas o ano atual

3. Alterando um Bloco HTML no Editor

Se você quiser uma solução simples diretamente no editor de blocos:

  1. Adicione um bloco de código no editor.
  2. Insira o código PHP diretamente:
<?php echo date_i18n( 'Y' ); ?>

Nota: Essa abordagem depende do suporte do WordPress para executar PHP no editor. Caso contrário, use o bloco dinâmico ou o shortcode.


4. Usando o Formato Padrão no theme.json

Se você estiver configurando blocos de data via JSON, infelizmente o theme.json não suporta diretamente formatação dinâmica. Nesse caso, será necessário usar o método do bloco dinâmico.

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *