
🐛 WordPress ja JoomSport: vigade parandamine ja plugina kohandamine
Spordisaidid WordPressil on haruldane tõug. Kui tenniseliit vajas saiti, kus oleksid mängude ajakavad, turniiritabelid ja mängijate profiilid, osutusid pistikprogrammide valikud masendavalt piiratuks. JoomSport PRO jäi ainsaks toimivaks valikuks, kuid seegi nõudis märkimisväärset pingutust.
Pistikprogrammil on järsk õpikõver: selle seadistamine konkreetse spordiala jaoks võtab aega ja kohati käitub kood nii, nagu poleks seda kirjutatud kogenud WordPressi kasutajatele. Teisalt on JoomSpordil tugev tugimeeskond, kes vastab igale kasutajatoe pöördumisele, ja see on tõsine pluss, kui kohandad pistikprogrammi projekti jaoks.
Allpool on kogumik testitud parandusi ja koodijuppe, mis on pärit reaalsest projektist. Need lahendavad konkreetseid probleeme: tüütutest autoriõiguse märgetest kuni sisu filtreerimise ja väljundmallideni. Kõik koodifragmendid kehtivad JoomSport versioonile 5.7.x (2026. aasta juuni seisuga 5.7.8).
💡 Kiirülevaade:
- Pistikprogrammi autoriõiguse märke eemaldamine: üks rida mallis
- Lehekülgede jaotusvea ja nulliga jagamise vea parandamine
- Pisipilditoe lisamine JoomSpordi postitustele
- Funktsiooni kirjutamine galeriisse iseäraldatud piltide automaatseks lisamiseks
- Mängija vanuse arvutamine ja salvestamine meta-väljale
- Perekonnanime esimese tähe salvestamine sorteerimiseks
- Väljundmallide loomine kohandatud postitüüpidele
JoomSpordi autoriõiguse märke eemaldamine
Tasuta versioonis kuvab pistikprogramm hooaja lehtede jaluses linki „powered by JoomSport". Väike asi, kuid kliendisaidil näeb see kohatu välja.
Fail, mida muuta:
1 /wp-content/plugins/joomsport-sports-league-results-management/sportleague/views/default/season.php
Umbes real 79 otsi üles ja eemalda rida, mis sisaldab linki saidile joomsport.com. Pärast pistikprogrammi uuendamist pead selle paranduse uuesti tegema, seega pea seda automaatsete uuenduste seadistamisel meeles.
Lehekülgede jaotusvea parandamine
Kui logides ilmub see hoiatus:
Warning: Division by zero in.../class-jsport-pagination.php on line 72
, üritab pistikprogramm lehekülgede arvutamisel nulliga jagada. Probleem tekib siis, kui muutuja $limit on määramata või võrdub nulliga.
Fail:
1 /wp-content/plugins/joomsport-sports-league-results-management/sportleague/classes/class-jsport-pagination.php
Otsi üles rida 70:
1 $npage = ceil($this->setcurrent / $limit);
Asenda järgmisega:
1 if (isset($limit) && $limit > 0) { 2 $npage = ceil($this->setcurrent / $limit); 3 }
Jagamise mähkimine kontrolli: kui $limit pole määratud või võrdub nulliga, siis arvutust lihtsalt ei käivitata ja viga kaob.
Pisipilditoe lisamine JoomSpordi postitustele
Vaikimisi ei toeta JoomSpordi kohandatud postitüübid (joomsport_player, joomsport_season jt) pisipilte. Ilma selleta ei saa korralikku galeriid ega mängijakaarti luua.
Lisa oma teema faili functions.php:
1 add_post_type_support('joomsport_player', 'thumbnail'); 2 add_post_type_support('joomsport_season', 'thumbnail');
Nüüd ilmub administraatori paneelis mängijate ja hooaegade jaoks tavaline „Iseäraldatud pilt" plokk. Samamoodi saad lisada pisipilditoe igale JoomSpordi kohandatud tüübile, asendades vastava nimetuse.
Raamistik JoomSpordi andmetöötlusfunktsioonidele
Kõik järgnevad koodijupid töötavad üheainsa save_post konksu sees. See käivitub postituse salvestamisel ja võimaldab meta-välju automaatselt täita.
Loo see ümbrisfail functions.php-s:
1 function my_custom_save_post($post_id) { 2 3 function jswpla__meta_save_SDStudio($post_id) { 4 5 // Place functions from the sections below here 6 7 } 8 add_action('save_post', 'jswpla__meta_save_SDStudio'); 9 } 10 add_action('save_post_joomsport_player', 'my_custom_save_post');
save_post_joomsport_player konks tagab käivitumise ainult „player" tüüpi postituste salvestamisel. Teiste tüüpide (joomsport_season, joomsport_match) puhul muutke järelliidet.
Galerii automaatne lisamine esiletõstetud pildist
Kui teil on kümneid mängijaid, muutub piltide käsitsi JoomSporti galeriisse lisamine tüütuks. Siin on funktsioon, mis postituse salvestamisel automaatselt esiletõstetud pildi ID haarab ja selle galeriisse esimeseks lisab:
1 $thumbnail_ID = get_post_thumbnail_id($post_id); 2 $values = [$thumbnail_ID]; 3 4 $check_id_thumb = get_post_meta($post_id, 'vdw_gallery_id'); 5 $My_False = false; 6 7 foreach ($check_id_thumb as $metakey) { 8 if (strpos($values, $check_id_thumb) !== false) { 9 $My_False = true; 10 } 11 } 12 13 if (!$My_False) { 14 add_post_meta($post_id, 'vdw_gallery_id', $values); 15 }
Loogika on lihtne: hankige esiletõstetud pildi ID, kontrollige, kas see on juba vdw_gallery_id meta-väljas olemas. Kui ei ole, lisage see. Kui on, jätke vahele, et vältida duplikaatide teket.
Mängija vanuse arvutamine meta-väljas
JoomSport salvestab mängija sünnikuupäeva _joomsport_player_ef meta-väljale. Vanuse kuvamiseks saidil peate selle esmalt arvutama ja salvestama. Kood põhineb lahendusel saidilt StackExchange ja ACF dokumentatsioonil.
1 $date_of_birth = get_post_meta($post_id, '_joomsport_player_ef', false); 2 3 foreach ($date_of_birth as $metakey) { 4 $metakey_borthay = $metakey[3]; 5 } 6 7 $age = intval(date('Y', time() - strtotime($metakey_borthay))) - 1970; 8 9 delete_post_meta($post_id, 'age_field'); 10 add_post_meta($post_id, 'age_field', $age);
Sünnikuupäev on salvestatud _joomsport_player_ef meta-välja massiivi neljanda elemendina (indeks [3]). Funktsioon eraldab selle, arvutab vanuse ja kirjutab selle eraldi age_field meta-väljale, mida saab seejärel mallides või filtreerimiseks kasutada.
Perekonnanime esitähe salvestamine
Mängijate tähestikuliseks sorteerimiseks või kiireks otsinguks on mugav omada eraldi välja perekonnanime esitähega. JoomSport salvestab ees- ja perekonnanimed _joomsport_player_personal meta-väljale.
1 $val_last_name = get_post_meta($post_id, '_joomsport_player_personal', false); 2 3 foreach ($val_last_name as $metakey) { 4 $metakey_Last_Name = $metakey['last_name']; 5 } 6 7 $metakey_Last_Name = preg_split('//u', $metakey_Last_Name, -1, PREG_SPLIT_NO_EMPTY); 8 $metakey_Last_Name = $metakey_Last_Name[0]; 9 10 $check_Liter_Last_Name = get_post_meta($post_id, 'First_letter_Last_Name'); 11 $My_False_Liter_Last_Name = false; 12 13 foreach ($metakey_Last_Name as $check_liter) { 14 if (strpos($check_Liter_Last_Name, $metakey_Last_Name) !== false) { 15 $My_False_Liter_Last_Name = true; 16 } 17 } 18 19 if (!$My_False_Liter_Last_Name) { 20 update_post_meta($post_id, 'First_letter_Last_Name', $metakey_Last_Name); 21 }
preg_split koos lipuga PREG_SPLIT_NO_EMPTY tükeldab UTF-8 stringi korrektselt tähtedeks, sealhulgas kirillitsas. Perekonnanime massiivi esimene täht salvestatakse First_letter_Last_Name meta-väljale.
Teksti otsimine ja asendamine kogu saidil
Universaalne koodijupp teksti hulgiasendamiseks sisus ja väljavõtetes. Kasulik mitte ainult JoomSporti jaoks; kasutage seda mis tahes globaalseteks muudatusteks.
1 function replace_text_wps($text) { 2 $replace = array( 3 'getimagesizefromstring' => 'excerpt', 4 'functidrgon' => 'function' 5 ); 6 $text = str_replace(array_keys($replace), $replace, $text); 7 return $text; 8 } 9 add_filter('the_content', 'replace_text_wps'); 10 add_filter('the_excerpt', 'replace_text_wps');
Lisage oma paarid $replace massiivi ja asendus rakendub kõigile postitustele lennult. Töötab kiiremini kui otsi-asenda pluginad, kuid pidage meeles: see on filter, andmebaasi algne sisu jääb muutumatuks.
Väljundmallid JoomSporti kohandatud tüüpidele
JoomSport registreerib mitu kohandatud postitüüpi, sealhulgas joomsport_player, joomsport_season ja joomsport_match. Vaikimisi renderdatakse neid teema single.php kaudu ja see näeb peaaegu alati lohakas välja.
Lahendus on luua eraldi mall. Tüübile „player":
1 single-joomsport_player.php
Fail paigutatakse teema juurkausta. Nimetus järgib WordPressi mallihierarhia reeglit: single-{slug}.php. Sarnaselt: single-joomsport_season.php hooaegade jaoks, single-joomsport_match.php matšide jaoks.
Võtke faili sisu oma teema single.php-st ja kohandage see vajaliku struktuuriga. Näiteks Cactuse teema puhul näeb mängija lehe põhimall välja selline:
1 <?php 2 /* Template Name: Post joomsport_player */ 3 4 get_header(); 5 6 $page_sidebar_layout = apply_filters('cactus_page_sidebar_layout', cactus_option('page_sidebar_layout')); 7 switch ($page_sidebar_layout) { 8 case 'left': 9 $aside_class = 'left-aside'; 10 break; 11 case 'right': 12 $aside_class = 'right-aside'; 13 break; 14 default: 15 $aside_class = 'no-aside'; 16 break; 17 } 18 ?> 19 20 <?php echo apply_filters('cactus_page_title_bar', '', 'page'); ?> 21 22 <div class="page-wrap"> 23 <?php do_action('cactus_before_page_wrap'); ?> 24 <div class="container"> 25 <div class="page-inner row <?php echo $aside_class; ?>"> 26 <div class="col-main"> 27 <section class="post-main" role="main" id="content"> 28 <article class="post-entry text-left"> 29 <?php do_action('cactus_before_page_content'); ?> 30 31 <?php 32 while (have_posts()) : 33 the_post(); 34 get_template_part('template-parts/page/content'); 35 the_posts_pagination(array( 36 'prev_text' => '<i class="fa fa-arrow-left"></i><span class="screen-reader-text">' . __('Previous page', 'cactus') . '</span>', 37 'next_text' => '<span class="screen-reader-text">' . __('Next page', 'cactus') . '</span><i class="fa fa-arrow-right"></i>', 38 'before_page_number' => '<span class="meta-nav screen-reader-text">' . __('Page', 'cactus') . ' </span>', 39 )); 40 endwhile; 41 ?> 42 43 <?php do_action('cactus_after_page_content'); ?> 44 </article> 45 46 <?php do_action('cactus_after_post_entry'); ?> 47 </section> 48 </div> 49 </div> 50 </div> 51 <?php do_action('cactus_after_page_wrap'); ?> 52 </div> 53 54 <?php get_footer(); ?> 55
Kopeeri see kood ja asenda CSS-klassid ja konksud nendega, mida sinu teema kasutab. Võti on struktuur: päis, konteiner, külgriba (valikuline), põhitsükkel ja jalus.
Pluginaga kiireks alustamiseks vaata BearDevi ametlikku õpetust: 11 minutit, mis säästab sulle paar tundi seadistamist.
⁉️🤔 Korduma kippuvad küsimused
Kas need parandused töötavad JoomSpordi PRO versiooniga?
Jah, kõik koodinäited on universaalsed ja neid on testitud ka PRO versiooniga.
save_post_joomsport_*konksud ja meta väljad on tasuta ja tasulises versioonis identsed. Ainus nüanss: PRO versioon lisab oma kohandatud postitüübid, seega kontrolli nimekuju enne pisipiltide toe lisamist.
Mida teha, kui plugin lakkab pärast muudatust töötamast?
Võta muudatused tagasi: kõik muudatused tehakse teema
functions.phpfailis või eraldi mallifailides, plugina tuuma ei puudutata. Erandiks on autoriõiguse eemaldamine ja lehekülgede kaupa kuvamise parandamine: need hõlmavad plugina enda failide muutmist ja need kirjutatakse uuendamisel üle. Enne mis tahes muudatuste tegemist varunda fail, mida muudad.
Kas ma saan neid funktsioone kasutada teiste pluginatega loodud postitüüpide jaoks?
Jah, lähenemine on universaalne. Asenda
joomsport_playervajaliku kohandatud tüübi nimekujuga ja_joomsport_player_efselle meta väljaga. Raamistiku koodi (save_postkonksuga ümbris) ja kontrolli loogikat (get_post_meta→foreach→ tingimus) saab täpselt samal kujul taaskasutada.
Kuidas lisada pisipiltide tugi kõigile JoomSpordi tüüpidele korraga?
Käivita tsükkel läbi nimekujude massiivi:
1 $joomsport_types = ['joomsport_player', 'joomsport_season', 'joomsport_match', 'joomsport_team']; 2 foreach ($joomsport_types as $type) { 3 add_post_type_support($type, 'thumbnail'); 4 }
Plugina kõigi kohandatud tüüpide loendi leiad selle seadetest või kasuta
var_dump(get_post_types()).
Miks ei tohiks ma JoomSpordi lisavälju filtreerimiseks kasutada?
JoomSport salvestab kõik lisaväljade väärtused ühte massiivi. Konkreetsele väljale ligipääs esiküljelt (näiteks AJAX filtreerimise ajal) on praktiliselt võimatu, sest andmed on ühendatud. Kui sul on vaja filtreerida mängijaid vanuse, esimese tähe või mõne muu kriteeriumi järgi, salvesta väärtus eraldi meta väljale, nagu on näidatud jaotistes
age_fieldjaFirst_letter_Last_Name.
Kas peaksid oma projekti jaoks JoomSporti kasutama?
JoomSport on nišitoode, kuid võimas tööriist. Kui vajad spordiliiga saiti tabelite, ajakavade ja profiilidega, on alternatiive WordPressis ausalt öeldes vähe. Plugina arendus on aktiivne: 2026. aasta juuni seisuga on praegune versioon 5.7.8 ning arendajad paikavad turvaauke ja lisavad funktsioone kiiresti.
Nõrk koht on õppimiskõver. Esmane seadistamine nõuab kannatlikkust ja osa plugina käitumisest on kavandatud pigem arendajatele kui tavakasutajatele. Kuid beardevi tugi on tõeliselt hea: igale kasutajatoe sõnumile vastatakse üksikasjalikult, sageli koos valmis koodinäitega.
Kui su projekt on spordiga seotud ja eelarve on piiratud, vali JoomSport ja planeeri aega kohandamiseks. Selle artikli kood lahendab enamiku tüüpilistest probleemidest, millega arendajad plugina reaalsele saidile integreerimisel kokku puutuvad.



