WordPress: sluit JavaScript of PHP dinamies in deur die pos-ID te gebruik
Een van die pogings waaraan ek hierdie jaar regtig gewerk het Martech Zone bied 'n paar eenvoudige webtoepassings wat nuttig is vir ons besoekers. Daar is 'n paar basiese ontwikkeling hieragter wat beide PHP en JavaScript insluit (meestal jQuery).
Met WordPress, is daar egter nie 'n baie gerieflike manier om bladsye of plasings te skryf met die spesifieke kode wat jy in die kop wil hê nie. Ek wil nie die kode werfwyd hê nie en wil nie my werf vertraag met 'n reusagtige skriflêer nie.
Toe ek die eerste keer die toepassings begin skryf het, het ek alles gedoen Organisch van my kind tema en gebruik is_single
met die pos ID-nommer. Na 'n hele paar toepassings het my functions.php-lêer egter nogal onstuimig begin raak.
'n Handige oplossing waarmee ek vorendag gekom het deur die WordPress API te gebruik, was om 'n apps
gids na my kind-tema waarvan die inhoud gelees word. Wanneer die lêernaam ooreenstem met die pos-ID, bevat dit die JavaScript- en/of PHP-lêer gebaseer op die lêeruitbreiding. Sommige van my programme het pasgemaakte PHP, sommige net JavaScript, en sommige het albei. Hierdie skrif werk vir enige scenario!
Sluit JavaScript of PHP-lêer op Pos ID in
Hier is die goeie oplossing waarmee ek vorendag gekom het. Ek wil byvoeg dat ek 'n paar gekry het hulp van ChatGPT ook op hierdie oplossing! Nog 'n probleem hiermee was dat ek nie die funksie wou uitvoer met elke enkele besoeker wat elke enkele bladsy of plasing op die webwerf tref nie, so ek gebruik WordPress' verbygaande metode om die resultate in die databasis te kas ... in hierdie geval vir 1 uur (3600 sekondes). Ek kan dit uiteindelik verander na een keer per dag, maar 'n uur is goed vir nou.
function include_app_file() {
// Check if this is a single post
if (is_single()) {
// Get the file path of the "apps" subdirectory from the transient cache
$apps_dir = get_transient('apps_dir');
// If the cache is empty, get the file path and store it in the cache
if (false === $apps_dir) {
$apps_dir = get_stylesheet_directory() . '/apps/';
set_transient('apps_dir', $apps_dir, 3600);
}
// Construct the file names based on the post ID
$js_file_name = get_the_ID() . '.js';
$php_file_name = get_the_ID() . '.php';
// Check if the JS file exists
if (file_exists($apps_dir . $js_file_name)) {
// If the JS file exists, include it in the head section of the page
wp_enqueue_script(get_the_ID(), get_stylesheet_directory_uri() . '/apps/' . $js_file_name, array(), null, true);
}
// Check if the PHP file exists
if (file_exists($apps_dir . $php_file_name)) {
// If the PHP file exists, include it
include($apps_dir . $php_file_name);
}
}
}
add_action('wp_head', 'include_app_file');
Nou hoef ek nie eers aan my functions.php-lêer te raak nie en my JavaScript- en PHP-funksies is netjies georganiseer in my apps
gids! Ek is nog nie klaar met die migreer van al die toepassings nie ... maar ek sal binnekort wees en dan sal ek vinnig meer toepassings kan ontwikkel met baie minder moeite.
As jy hierdie benadering wil gebruik, hoef jy net hierdie kode by jou kind-tema se functions.php-lêer te voeg en dan 'n gids by te voeg genaamd app
na jou kind-tema-lêergids. Terwyl jy jou bladsy ontwikkel waar jy 'n spesifieke Javascript-lêer of PHP-lêer wil insluit, voeg jy net daardie lêers by met die Pos ID-nommer as die naam.
As 'n voorbeeld, ek het 'n toepassing wat skakel rye om na CSV of CSV na rye. Hierdie spesifieke toepassing gebruik slegs JavaScript (en jQuery), so ek het net 'n lêer by die apps
gids. Die pos-ID is 123884, so ek het die lêer bygevoeg 123884.js
na my toepassingsgids, my kode geplak, en ek was aan die gang!
Kodebeperkings
Ek het wel een beperking met hierdie funksie ervaar en dit was die integrasie van my e-pos swartlys kontroleerder. Die probleem is dat daardie kode gebruik WordPress' AJAX funksionaliteit en ek moes die funksies binne functions.php verklaar eerder as 'n dinamiese include-lêer op die Post ID.
As jy hierdie kode wil gebruik, gaan daarvoor … Ek sal net 'n bietjie krediet waardeer of dalk kan jy 'n wenk na my kant stuur!
Openbaarmaking: Martech Zone gebruik sy geaffilieerde skakel vir WordPress in hierdie artikel.