Recentemente me deparei com um erro ao tentar editar a descrição de uma coleção dentro do site em que atuo. Busquei este fórum para ver se já haviam relatado o erro e me deparei com o fato de que ainda não havia sido relatado, por isso, este registro.
Logo após verificar o problema com a edição da descrição da coleção, tentei verificar se a edição, criação e exclusão de um item também incorreria no problema, a resposta foi sim. Ao buscar o inspecionar elemento quando do momento da edição da descrição da coleção, deparei com a seguinte informação:
{
"code": "internal_server_error",
"message": "<p>H\u00e1 um erro cr\u00edtico no seu site.<\/p><p><a href=\"https:\/\/wordpress.org\/documentation\/article\/faq-troubleshooting\/\">Saiba mais sobre a como resolver problemas do WordPress.<\/a><\/p>",
"data": {
"status": 500,
"error": {
"type": 1,
"message": "Uncaught TypeError: Argument 3 passed to TEC\\Events\\Calendar_Embeds\\Calendar_Embeds::disable_slug_changes() must be of the type array, object given, called in \/var\/www\/html\/forumeja\/public_html\/wp-includes\/class-wp-hook.php on line 324 and defined in \/var\/www\/html\/forumeja\/public_html\/wp-content\/plugins\/the-events-calendar\/src\/Events\/Calendar_Embeds\/Calendar_Embeds.php:163\nStack trace:\n#0 \/var\/www\/html\/forumeja\/public_html\/wp-includes\/class-wp-hook.php(324): TEC\\Events\\Calendar_Embeds\\Calendar_Embeds->disable_slug_changes()\n#1 \/var\/www\/html\/forumeja\/public_html\/wp-includes\/plugin.php(205): WP_Hook->apply_filters()\n#2 \/var\/www\/html\/forumeja\/public_html\/wp-includes\/post.php(4761): apply_filters()\n#3 \/var\/www\/html\/forumeja\/public_html\/wp-content\/plugins\/tainacan\/classes\/repositories\/class-tainacan-repository.php(182): wp_insert_post()\n#4 \/var\/www\/html\/forumeja\/public_html\/wp-content\/plugins\/tainacan\/classes\/repositories\/class-tainacan-collections.php(566): Tainacan\\Repositories\\Repository->insert()\n#5 \/var\/www\/h",
"file": "\/var\/www\/html\/forumeja\/public_html\/wp-content\/plugins\/the-events-calendar\/src\/Events\/Calendar_Embeds\/Calendar_Embeds.php",
"line": 163
}
},
"additional_errors": []
}
Ao ler o código acima percebi que o mesmo referenciava um outro plugin que usamos na instância, o ‘The Events Calendar – Plugin do WordPress | WordPress.org Brasil’. Usando o GPT na tentativa de entender o erro, fui informado que o problema, na avaliação do chatbot, vinha mesmo do plugin ‘The Events Calendar’. O plugin estava se “enfiando” em um filtro ou hook do WordPress (wp_insert_post
) que também é usado pelo Tainacan para criar ou editar coleções. O problema é que o Tainacan parece estar passando um objeto como terceiro argumento para esse hook, enquanto o The Events Calendar espera um array.
Uncaught TypeError: Argument 3 passed to Calendar_Embeds::disable_slug_changes()
must be of the type array, object given
Segundo o chatbot, essa é uma falha do plugin ‘The Events Calendar’, pois ele deveria verificar o tipo da variável antes de tentar operar sobre ela.
Implementação da correção
Como forma de contornar esse problema, mesmo que momentaneamente, realizei a edição do código do ‘The Events Calendar’ a partir do editor de arquivos de plugin no Wordpress, alterando diretamente o arquivo Calendar_Embeds.php, em que adicionei uma verificação com is_array() antes da manipulação do parâmetro. Assim, o código ignora execuções que não atendem ao tipo esperado, evitando que o erro interrompa o funcionamento do Tainacan.
Código implementado:
public function disable_slug_changes( $can_change_slug, $post, $postarr ) {
if ( ! is_array( $postarr ) ) {
return $can_change_slug;
}
Após a execução da alteração, ativei novamente o plugin e verifiquei se a criação/edição de coleções e itens voltou a funcionar e a resposta é sim! Realizei testes e não foi notado outros problemas.
IMPORTANTE - A mudança executada dentro do código do plugin não é permanente, uma vez que pode ser sobrescrita ao atualizar o plugin.