Automatic AI Posts, setup automatizado e seeder de permalinks/avatar

Plugin automatic-ai-posts (v2.0.0)
- Pipeline completo: coleta de feeds RSS/Atom, filtro por IA, reescrita,
  categoria, imagem de capa e agendamento
- Página de configuração com teste real do provedor de IA
- Editor: botão para refazer imagem de capa e metadados, textos em PT-BR
- Ajuda com botão Pix (copia-e-cola + QR) e sem nota de avaliação
- Cache-busting por mtime nos assets do admin

Tema gustavoo-portfolio
- Marca do cabeçalho reduzida a "Gustavo"
- Suporte a título próprio da marca

Setup (docker/wp-init.sh, compose.yaml)
- Plugins de terceiros (Post Views Counter, Rank Math, Site Kit)
  instalados do WordPress.org em vez de versionados
- Falha explícita ao final se algum plugin obrigatório não instalar
- WPCLI_UID/WPCLI_GID configuráveis

Seeder do tema
- Links permanentes "Dia e nome" e avatar "Iniciais" aplicados
  apenas em instalação nova, com regravação do .htaccess
This commit is contained in:
Gustavo committed 2026-11-02 13:33:30 -03:00
1 parent 5891467266
commit 0ea3651fb5
73 files changed
+8858 -39

No files matched your search

@@ -28,7 +28,7 @@ $gustavoo_primary_shortcut_attr = is_customize_preview() ? ' data-customize-part
<div class="site-branding">
<?php gustavoo_portfolio_the_brand(); ?>
<a class="site-branding__text" href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home">
<span class="site-branding__name"><?php echo esc_html( get_bloginfo( 'name' ) ); ?></span>
<span class="site-branding__name"><?php echo esc_html( gustavoo_portfolio_brand_name() ); ?></span>
<span class="site-branding__tagline site-branding__tagline--full"><?php esc_html_e( 'Desenvolvedor Full Stack | Web, Mobile, Infraestrutura & Automação', 'gustavoo-portfolio' ); ?></span>
<span class="site-branding__tagline site-branding__tagline--short"><?php esc_html_e( 'Desenvolvedor Full Stack | Web, Mobile, Infraestrutura & Automação', 'gustavoo-portfolio' ); ?></span>
</a>
@@ -18,7 +18,7 @@ function gustavoo_portfolio_get_defaults() {
$defaults = array(
'hero_eyebrow' => __( 'Desenvolvimento de ponta a ponta', 'gustavoo-portfolio' ),
'hero_title' => __( 'Transformo ideias em produtos digitais sólidos.', 'gustavoo-portfolio' ),
'hero_description' => __( 'Gustavo, Desenvolvedor Full Stack Sênior. Web, mobile, infraestrutura e automação para tirar projetos do papel e fazê-los crescer.', 'gustavoo-portfolio' ),
'hero_description' => __( 'Gustavo, Desenvolvedor Full Stack. Web, mobile, infraestrutura e automação para tirar projetos do papel e fazê-los crescer.', 'gustavoo-portfolio' ),
'hero_primary_label' => __( 'Ver projetos', 'gustavoo-portfolio' ),
'hero_primary_url' => '#projetos',
'hero_secondary_label' => __( 'Fale comigo', 'gustavoo-portfolio' ),
@@ -82,6 +82,29 @@ function gustavoo_portfolio_the_brand() {
<?php
}
/**
* Short name shown next to the logo in the header.
*
* The full professional title lives in the site name (blogname), which becomes
* the browser title. The header only shows the first name, so set
* `gustavoo_portfolio_brand_name` in the Customizer to override it.
*
* @return string
*/
function gustavoo_portfolio_brand_name() {
$brand = get_theme_mod( 'gustavoo_portfolio_brand_name', '' );
$brand = is_string( $brand ) ? trim( $brand ) : '';
if ( '' !== $brand ) {
return $brand;
}
$name = (string) get_bloginfo( 'name' );
$name = strtok( $name, ' |' );
return $name ? $name : get_bloginfo( 'name' );
}
/**
* Return the appropriate URL for a front-page section.
*