Tēmas uzstādīšana un resursi
Katra WordPress tēma sākas ar trim lietām: pasaki WordPress, kādas funkcijas tēma atbalsta, ielādē CSS/JS pareizajā brīdī, un — ja nepieciešams — reģistrē savas lapas veidnes. Zemāk ir reāls piemērs no tēmas Atvērt Savu Gaismu.
1. Tēmas atbalsta pieteikšana ar after_setup_theme
Hook after_setup_theme izpildās pēc tam, kad tēma ir ielādēta, bet pirms lielākās daļas citu hooku. Tas ir pareizais brīdis, kur pieteikt funkcionalitāti (add_theme_support) un reģistrēt navigācijas izvēlnes.
function asg_theme_setup() {
// Pieteiktās funkcijas
add_theme_support( 'title-tag' ); // WordPress pats renderē <title>
add_theme_support( 'post-thumbnails' ); // Attēlu (thumbnail) atbalsts
add_theme_support( 'custom-logo' ); // Logo caur Customizer
add_theme_support( 'html5', array(
'search-form',
'comment-form',
'comment-list',
'gallery',
'caption',
) );
add_theme_support( 'customize-selective-refresh-widgets' );
add_theme_support( 'responsive-embeds' );
add_theme_support( 'align-wide' );
// Navigācijas izvēlnes — parādīsies Izskats → Izvēlnes
register_nav_menus( array(
'primary' => __( 'Primārā izvēlne', 'atvert-savu-gaismu' ),
'footer' => __( 'Kājene', 'atvert-savu-gaismu' ),
) );
// Tulkojumu fails no /languages
load_theme_textdomain( 'atvert-savu-gaismu', get_template_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'asg_theme_setup' );
after_setup_theme, nevis tieši theme galvenē?add_theme_support() izpildās pārāk vēlu (piem. init), daži WordPress core mehānismi (piem. post thumbnails reģistrācija) to var vienkārši ignorēt. after_setup_theme ir uzticamākā vieta.
2. Stilu un skriptu ielāde ar wp_enqueue_scripts
Nekad nevajag rakstīt <link> vai <script> tieši header.php failā — WordPress paredz wp_enqueue_style() / wp_enqueue_script(), kas pareizi pārvalda versijas, atkarības un secību.
function asg_scripts() {
// Ārējie fonti un ikonas
wp_enqueue_style(
'google-fonts',
'https://fonts.googleapis.com/css2?family=Racing+Sans+One&display=swap',
array(),
null
);
wp_enqueue_style( 'font-awesome', 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css', array(), '6.5.1' );
// Tēmas pašas stilu datnes — versija no theme header, lai pārlūks
// zina, kad kešs jāatjauno pēc katras izlaiduma
wp_enqueue_style( 'asg-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) );
wp_enqueue_style( 'asg-custom', get_template_directory_uri() . '/assets/css/styles.css', array(), wp_get_theme()->get( 'Version' ) );
// jQuery kā atkarība — WordPress to jau reģistrē ('jquery' handle)
wp_enqueue_script(
'asg-scripts',
get_template_directory_uri() . '/assets/js/scripts.js',
array( 'jquery' ),
wp_get_theme()->get( 'Version' ),
true // ielādēt footer, nevis head
);
// Nodod PHP datus uz JS pusi (URL, nonce) — sk. AJAX lapu
wp_localize_script( 'asg-scripts', 'asgData', array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'asg_nonce' ),
'themeUri' => get_template_directory_uri(),
) );
}
add_action( 'wp_enqueue_scripts', 'asg_scripts' );
filemtime()wp_get_theme()->get('Version')) mainās reti — labi ilgtermiņa kešam, bet slikti, kad testē izmaiņas lokāli. Šai tēmai karuseļa CSS izmanto filemtime() tā vietā — versijas numurs mainās katru reizi, kad fails tiek saglabāts:
wp_enqueue_style(
'asg-carousel',
get_template_directory_uri() . '/assets/css/carousel.css',
array(),
filemtime( get_template_directory() . '/assets/css/carousel.css' )
);
3. Custom page templates reģistrācija
WordPress parasti atrod veidnes ar komentāru Template Name: faila augšā, bet apakšmapēs (page-templates/) tas ne vienmēr notiek automātiski visās vidēs. Filtrs theme_page_templates liek tām parādīties Lapas redaktora "Veidne" izvēlnē droši:
function asg_add_page_templates( $templates ) {
$custom_templates = array(
'page-templates/page-template-par-mums.php' => __( 'Par Mums Template', 'atvert-savu-gaismu' ),
'page-templates/page-template-maratoni.php' => __( 'Maratoni Template', 'atvert-savu-gaismu' ),
);
return array_merge( $templates, $custom_templates );
}
add_filter( 'theme_page_templates', 'asg_add_page_templates' );
'page-templates/page-template-par-mums.php' ir ceļš no tēmas saknes, ne no functions.php atrašanās vietas. Ja fails atrodas citur, veidne redaktorā parādīsies, bet izvēloties to izmest baltu ekrānu (fails netiks atrasts).
Pilns, palaižams piemērs
Zemāk esošais fails ir pašpietiekams — ielīmē to jaunas tēmas functions.php failā, un tas strādās (pieņemot, ka assets/css/styles.css un assets/js/scripts.js eksistē tēmas mapē):
<?php
if ( ! defined( 'ABSPATH' ) ) exit;
function asg_theme_setup() {
add_theme_support( 'title-tag' );
add_theme_support( 'post-thumbnails' );
add_theme_support( 'custom-logo' );
register_nav_menus( array(
'primary' => __( 'Primārā izvēlne', 'my-theme' ),
) );
}
add_action( 'after_setup_theme', 'asg_theme_setup' );
function asg_scripts() {
wp_enqueue_style( 'my-style', get_stylesheet_uri(), array(), '1.0.0' );
wp_enqueue_script(
'my-scripts',
get_template_directory_uri() . '/assets/js/scripts.js',
array( 'jquery' ),
'1.0.0',
true
);
wp_localize_script( 'my-scripts', 'myData', array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'my_nonce' ),
) );
}
add_action( 'wp_enqueue_scripts', 'asg_scripts' );