Implementación masiva de funcionalidades esenciales del tema apus-theme usando agentes paralelos para máxima eficiencia. **Issues Completados:** **Issue #2 - Eliminar bloat de WordPress:** - inc/performance.php: 13 funciones que remueven emojis, oEmbed, feeds, dashicons, jQuery migrate, XML-RPC, etc. - Optimización completa del frontend **Issue #3 - Desactivar búsqueda nativa:** - inc/search-disable.php: Bloquea queries de búsqueda, widget, formularios - search.php: Retorna 404 con mensaje amigable **Issue #4 - Desactivar comentarios:** - inc/comments-disable.php: 15 funciones que eliminan comentarios de frontend y backend - comments.php: Template desactivado **Issue #8 - Footer con 4 widgets:** - footer.php: Verificado con 4 áreas de widgets y copyright - assets/css/footer.css: Estilos responsive completos - Sistema de anchos configurables **Issue #9 - Jerarquía de plantillas:** - home.php, category.php, tag.php, author.php, date.php, taxonomy.php, attachment.php - 7 nuevas plantillas + 12 verificadas - Template parts completos - Paginación en todos los archives **Issue #10 - Imágenes destacadas:** - inc/featured-image.php: 12 funciones para manejo de featured images - Sin placeholders, lazy loading, alt text automático - Responsive con Bootstrap, aspect ratio **Issue #11 - Badge de categoría:** - inc/category-badge.php: Badge Bootstrap sobre H1 en single posts - Excluye "Uncategorized" - Template tag: apus_display_category_badge() **Issue #12 - TOC automático:** - inc/toc.php: Genera TOC desde H2/H3 - assets/css/toc.css: Estilos con numeración CSS counters - assets/js/toc.js: Smooth scroll, scroll spy, toggle - Configurable con apus_get_option() **Issue #13 - Posts relacionados:** - inc/related-posts.php: Query por categoría, 12 funciones - inc/admin/related-posts-options.php: Sistema de configuración - assets/css/related-posts.css: Cards responsive - Hook automático en single posts **Issue #16 - AdSense delay:** - inc/adsense-delay.php: Retardo de carga hasta scroll/click - assets/js/adsense-loader.js: Detecta interacciones - Mejora FID y TBT para Core Web Vitals **Archivos Modificados:** - functions.php: Includes de nuevos módulos, removido feed support - single.php: Integración de category badge - inc/enqueue-scripts.php: Enqueue de nuevos assets - inc/theme-options-helpers.php: Helper functions para TOC **Archivos Creados:** - 7 nuevas plantillas WordPress - 3 nuevos módulos inc/ (comments-disable, search-disable) - 8 reportes de documentación .md **Estadísticas:** - Total funciones PHP: 60+ nuevas funciones - Líneas de código: 2,500+ líneas - Archivos nuevos: 18 - Archivos modificados: 9 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
346 lines
6.6 KiB
PHP
346 lines
6.6 KiB
PHP
<?php
|
|
/**
|
|
* Theme Options Helper Functions
|
|
*
|
|
* @package Apus_Theme
|
|
* @since 1.0.0
|
|
*/
|
|
|
|
// Exit if accessed directly
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Get theme option value
|
|
*
|
|
* @param string $option_name The option name
|
|
* @param mixed $default Default value if option doesn't exist
|
|
* @return mixed The option value
|
|
*/
|
|
function apus_get_option($option_name, $default = '') {
|
|
$options = get_option('apus_theme_options', array());
|
|
|
|
if (isset($options[$option_name])) {
|
|
return $options[$option_name];
|
|
}
|
|
|
|
return $default;
|
|
}
|
|
|
|
/**
|
|
* Check if option is enabled (checkbox/switch)
|
|
*
|
|
* @param string $option_name The option name
|
|
* @return bool True if enabled, false otherwise
|
|
*/
|
|
function apus_is_option_enabled($option_name) {
|
|
return (bool) apus_get_option($option_name, false);
|
|
}
|
|
|
|
/**
|
|
* Get breadcrumbs separator
|
|
*
|
|
* @return string The separator
|
|
*/
|
|
function apus_get_breadcrumb_separator() {
|
|
return apus_get_option('breadcrumb_separator', '>');
|
|
}
|
|
|
|
/**
|
|
* Check if breadcrumbs should be shown
|
|
*
|
|
* @return bool
|
|
*/
|
|
function apus_show_breadcrumbs() {
|
|
return apus_is_option_enabled('enable_breadcrumbs');
|
|
}
|
|
|
|
/**
|
|
* Get excerpt length
|
|
*
|
|
* @return int The excerpt length
|
|
*/
|
|
function apus_get_excerpt_length() {
|
|
return (int) apus_get_option('excerpt_length', 55);
|
|
}
|
|
|
|
/**
|
|
* Get excerpt more text
|
|
*
|
|
* @return string The excerpt more text
|
|
*/
|
|
function apus_get_excerpt_more() {
|
|
return apus_get_option('excerpt_more', '...');
|
|
}
|
|
|
|
/**
|
|
* Check if related posts should be shown
|
|
*
|
|
* @return bool
|
|
*/
|
|
function apus_show_related_posts() {
|
|
return apus_is_option_enabled('enable_related_posts');
|
|
}
|
|
|
|
/**
|
|
* Get number of related posts to show
|
|
*
|
|
* @return int
|
|
*/
|
|
function apus_get_related_posts_count() {
|
|
return (int) apus_get_option('related_posts_count', 3);
|
|
}
|
|
|
|
/**
|
|
* Get related posts taxonomy
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_related_posts_taxonomy() {
|
|
return apus_get_option('related_posts_taxonomy', 'category');
|
|
}
|
|
|
|
/**
|
|
* Get related posts title
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_related_posts_title() {
|
|
return apus_get_option('related_posts_title', __('Related Posts', 'apus-theme'));
|
|
}
|
|
|
|
/**
|
|
* Check if specific performance optimization is enabled
|
|
*
|
|
* @param string $optimization The optimization name
|
|
* @return bool
|
|
*/
|
|
function apus_is_performance_enabled($optimization) {
|
|
return apus_is_option_enabled('performance_' . $optimization);
|
|
}
|
|
|
|
/**
|
|
* Get copyright text
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_copyright_text() {
|
|
$default = sprintf(
|
|
__('© %s %s. All rights reserved.', 'apus-theme'),
|
|
date('Y'),
|
|
get_bloginfo('name')
|
|
);
|
|
return apus_get_option('copyright_text', $default);
|
|
}
|
|
|
|
/**
|
|
* Get social media links
|
|
*
|
|
* @return array Array of social media links
|
|
*/
|
|
function apus_get_social_links() {
|
|
return array(
|
|
'facebook' => apus_get_option('social_facebook', ''),
|
|
'twitter' => apus_get_option('social_twitter', ''),
|
|
'instagram' => apus_get_option('social_instagram', ''),
|
|
'linkedin' => apus_get_option('social_linkedin', ''),
|
|
'youtube' => apus_get_option('social_youtube', ''),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Check if comments are enabled for posts
|
|
*
|
|
* @return bool
|
|
*/
|
|
function apus_comments_enabled_for_posts() {
|
|
return apus_is_option_enabled('enable_comments_posts');
|
|
}
|
|
|
|
/**
|
|
* Check if comments are enabled for pages
|
|
*
|
|
* @return bool
|
|
*/
|
|
function apus_comments_enabled_for_pages() {
|
|
return apus_is_option_enabled('enable_comments_pages');
|
|
}
|
|
|
|
/**
|
|
* Get default post layout
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_default_post_layout() {
|
|
return apus_get_option('default_post_layout', 'right-sidebar');
|
|
}
|
|
|
|
/**
|
|
* Get default page layout
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_default_page_layout() {
|
|
return apus_get_option('default_page_layout', 'right-sidebar');
|
|
}
|
|
|
|
/**
|
|
* Get posts per page for archive
|
|
*
|
|
* @return int
|
|
*/
|
|
function apus_get_archive_posts_per_page() {
|
|
$custom = (int) apus_get_option('archive_posts_per_page', 0);
|
|
return $custom > 0 ? $custom : get_option('posts_per_page', 10);
|
|
}
|
|
|
|
/**
|
|
* Check if featured image should be shown on single posts
|
|
*
|
|
* @return bool
|
|
*/
|
|
function apus_show_featured_image_single() {
|
|
return apus_is_option_enabled('show_featured_image_single');
|
|
}
|
|
|
|
/**
|
|
* Check if author box should be shown on single posts
|
|
*
|
|
* @return bool
|
|
*/
|
|
function apus_show_author_box() {
|
|
return apus_is_option_enabled('show_author_box');
|
|
}
|
|
|
|
/**
|
|
* Get date format
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_date_format() {
|
|
return apus_get_option('date_format', 'd/m/Y');
|
|
}
|
|
|
|
/**
|
|
* Get time format
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_time_format() {
|
|
return apus_get_option('time_format', 'H:i');
|
|
}
|
|
|
|
/**
|
|
* Get logo URL
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_logo_url() {
|
|
$logo_id = apus_get_option('site_logo', 0);
|
|
if ($logo_id) {
|
|
$logo = wp_get_attachment_image_url($logo_id, 'full');
|
|
if ($logo) {
|
|
return $logo;
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Get favicon URL
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_favicon_url() {
|
|
$favicon_id = apus_get_option('site_favicon', 0);
|
|
if ($favicon_id) {
|
|
$favicon = wp_get_attachment_image_url($favicon_id, 'full');
|
|
if ($favicon) {
|
|
return $favicon;
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Get custom CSS
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_custom_css() {
|
|
return apus_get_option('custom_css', '');
|
|
}
|
|
|
|
/**
|
|
* Get custom JS (header)
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_custom_js_header() {
|
|
return apus_get_option('custom_js_header', '');
|
|
}
|
|
|
|
/**
|
|
* Get custom JS (footer)
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_custom_js_footer() {
|
|
return apus_get_option('custom_js_footer', '');
|
|
}
|
|
|
|
/**
|
|
* Check if lazy loading is enabled
|
|
*
|
|
* @return bool
|
|
*/
|
|
function apus_is_lazy_loading_enabled() {
|
|
return apus_is_option_enabled('enable_lazy_loading');
|
|
}
|
|
|
|
/**
|
|
* Get all theme options
|
|
*
|
|
* @return array
|
|
*/
|
|
function apus_get_all_options() {
|
|
return get_option('apus_theme_options', array());
|
|
}
|
|
|
|
/**
|
|
* Reset theme options to defaults
|
|
*
|
|
* @return bool
|
|
*/
|
|
function apus_reset_options() {
|
|
return delete_option('apus_theme_options');
|
|
}
|
|
|
|
/**
|
|
* Check if Table of Contents is enabled
|
|
*
|
|
* @return bool
|
|
*/
|
|
function apus_is_toc_enabled() {
|
|
return apus_get_option('enable_toc', true);
|
|
}
|
|
|
|
/**
|
|
* Get minimum headings required to display TOC
|
|
*
|
|
* @return int
|
|
*/
|
|
function apus_get_toc_min_headings() {
|
|
return (int) apus_get_option('toc_min_headings', 2);
|
|
}
|
|
|
|
/**
|
|
* Get TOC title
|
|
*
|
|
* @return string
|
|
*/
|
|
function apus_get_toc_title() {
|
|
return apus_get_option('toc_title', __('Table of Contents', 'apus-theme'));
|
|
}
|