Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

🐛 WordPress ja JoomSport: vikojen korjaaminen ja lisäosan mukauttaminen

🐛 WordPress ja JoomSport: vikojen korjaaminen ja lisäosan mukauttaminen

Urheilusivustot WordPress:llä ovat harvinaista lajia. Kun tennisliitto tarvitsi sivuston, jossa on otteluaikataulut, turnaustaulukot ja pelaajaprofiilit, lisäosavaihtoehdot osoittautuivat turhauttavan rajallisiksi. JoomSport PRO:sta tuli ainoa toimiva valinta, mutta sekään ei onnistunut ilman huomattavaa vaivannäköä.

Lisäosan oppimiskäyrä on jyrkkä: sen määrittäminen tiettyä urheilulajia varten vie aikaa, ja paikoin koodi käyttäytyy kuin sitä ei olisi kirjoitettu kokeneille WordPress-käyttäjille. Toisaalta JoomSportilla on vahva tukitiimi, joka vastaa jokaiseen tukipyyntöön, ja se on merkittävä etu, kun lisäosaa räätälöidään projektia varten.

Alla on kokoelma testattuja korjauksia ja koodinpätkiä, jotka on kerätty todellisesta projektista. Ne ratkaisevat tiettyjä ongelmia: ärsyttävistä tekijänoikeusilmoituksista sisällön suodatukseen ja tulostuspohjiin. Kaikki koodinpätkät ovat ajantasaisia JoomSportin versiolle 5.7.x (kesäkuussa 2026 versio 5.7.8).

💡 Pikakatsaus:

  • Lisäosan tekijänoikeustiedon poistaminen: yksi rivi pohjassa
  • Sivutuksen ja nollalla jakamisen virheen korjaaminen
  • Pikkukuvatuen lisääminen JoomSport-julkaisuille
  • Funktion kirjoittaminen artikkelikuvien automaattiseen lisäämiseen galleriaan
  • Pelaajan iän laskeminen ja tallentaminen metakenttään
  • Sukunimen ensimmäisen kirjaimen tallentaminen lajittelua varten
  • Tulostuspohjien luominen mukautetuille julkaisutyypeille

JoomSportin tekijänoikeustiedon poistaminen

Ilmaisversiossa lisäosa näyttää "powered by JoomSport" -linkin kausisivujen alatunnisteessa. Pieni juttu, mutta se näyttää sopimattomalta asiakassivustolla.

Muokattava tiedosto:

1/wp-content/plugins/joomsport-sports-league-results-management/sportleague/views/default/season.php

Noin riviltä 79 etsi ja poista rivi, joka sisältää linkin osoitteeseen joomsport.com. Lisäosan päivityksen jälkeen tämä korjaus on tehtävä uudelleen, joten pidä se mielessä automaattipäivityksiä määrittäessäsi.

Sivutusvirheen korjaaminen

Jos lokeissasi näkyy tämä varoitus:

Warning: Division by zero in.../class-jsport-pagination.php on line 72

, lisäosa yrittää jakaa nollalla laskiessaan sivuja. Ongelma ilmenee, kun $limit-muuttujaa ei ole määritelty tai se on nolla.

Tiedosto:

1/wp-content/plugins/joomsport-sports-league-results-management/sportleague/classes/class-jsport-pagination.php

Etsi rivi 70:

1$npage = ceil($this->setcurrent / $limit);

Korvaa tällä:

1if (isset($limit) && $limit > 0) {
2 $npage = ceil($this->setcurrent / $limit);
3}

Jakolasku kääritään tarkistukseen: jos $limit ei ole asetettu tai se on nolla, laskutoimitusta ei yksinkertaisesti suoriteta, ja virhe katoaa.

Pikkukuvatuen lisääminen JoomSport-julkaisuille

Oletuksena JoomSportin mukautetut julkaisutyypit (joomsport_player, joomsport_season ja muut) eivät tue pikkukuvia. Ilman tätä et voi rakentaa kunnollista galleriaa tai pelaajakorttia.

Lisää teemasi functions.php-tiedostoon:

1add_post_type_support('joomsport_player', 'thumbnail');
2add_post_type_support('joomsport_season', 'thumbnail');

Nyt tavallinen "Artikkelikuva"-lohko tulee näkyviin hallintapaneeliin pelaajille ja kausille. Vastaavasti voit lisätä pikkukuvatuen mille tahansa JoomSportin mukautetulle tyypille korvaamalla sopivan lyhytnimen.

Kehys JoomSportin tietojenkäsittelyfunktioille

Kaikki seuraavat koodinpätkät toimivat yhden save_post-koukun sisällä. Se laukeaa, kun julkaisu tallennetaan, ja sen avulla voit täyttää metakenttiä automaattisesti.

Luo tämä kääre functions.php-tiedostoon:

1function 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}
10add_action('save_post_joomsport_player', 'my_custom_save_post');

save_post_joomsport_player-koukku varmistaa, että suoritus tapahtuu vain tallennettaessa "player"-tyypin julkaisuja. Muita tyyppejä (joomsport_season, joomsport_match) varten vaihda loppuosa.

Artikkelikuvan automaattinen lisääminen galleriaan

Kun sinulla on kymmeniä pelaajia, kuvien lisäämisestä JoomSportin galleriaan käsin tulee työlästä. Tässä funktio, joka nappaa automaattisesti artikkelikuvan ID:n julkaisua tallennettaessa ja lisää sen ensimmäiseksi galleriaan:

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
7foreach ($check_id_thumb as $metakey) {
8 if (strpos($values, $check_id_thumb) !== false) {
9 $My_False = true;
10 }
11}
12
13if (!$My_False) {
14 add_post_meta($post_id, 'vdw_gallery_id', $values);
15}

Logiikka on yksinkertainen: hae artikkelikuvan ID, tarkista onko se jo vdw_gallery_id-metakentässä. Jos ei ole, lisää se. Jos on, ohita, jotta vältetään duplikaatit.

Pelaajan iän laskeminen metakenttään

JoomSport tallentaa pelaajan syntymäpäivän _joomsport_player_ef-metakenttään. Jotta iän voi näyttää sivustolla, se täytyy ensin laskea ja tallentaa. Koodi perustuu ratkaisuun StackExchange ja ACF-dokumentaatioon.

1$date_of_birth = get_post_meta($post_id, '_joomsport_player_ef', false);
2
3foreach ($date_of_birth as $metakey) {
4 $metakey_borthay = $metakey[3];
5}
6
7$age = intval(date('Y', time() - strtotime($metakey_borthay))) - 1970;
8
9delete_post_meta($post_id, 'age_field');
10add_post_meta($post_id, 'age_field', $age);

Syntymäpäivä on tallennettuna _joomsport_player_ef-metakentän taulukon neljänteen alkioon (indeksi [3]). Funktio poimii sen, laskee iän ja kirjoittaa sen erilliseen age_field-metakenttään, jota voidaan sitten käyttää mallipohjissa tai suodatukseen.

Sukunimen ensimmäisen kirjaimen tallentaminen

Pelaajien aakkosjärjestykseen lajittelua tai pikalukua varten on kätevää, että sukunimen ensimmäiselle kirjaimelle on oma kenttänsä. JoomSport tallentaa etu- ja sukunimen _joomsport_player_personal-metakenttään.

1$val_last_name = get_post_meta($post_id, '_joomsport_player_personal', false);
2
3foreach ($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
13foreach ($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
19if (!$My_False_Liter_Last_Name) {
20 update_post_meta($post_id, 'First_letter_Last_Name', $metakey_Last_Name);
21}

preg_split PREG_SPLIT_NO_EMPTY-lipulla pilkkoo UTF-8-merkkijonon oikein merkeiksi, mukaan lukien kyrilliset aakkoset. Sukunimitaulukon ensimmäinen merkki tallennetaan First_letter_Last_Name-metakenttään.

Tekstin haku ja korvaus koko sivustolla

Yleiskäyttöinen pätkä massakorvaukseen sisällössä ja nostoissa. Hyödyllinen muuhunkin kuin JoomSportiin; käytä sitä mihin tahansa globaaleihin muokkauksiin.

1function 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}
9add_filter('the_content', 'replace_text_wps');
10add_filter('the_excerpt', 'replace_text_wps');

Lisää omat parisi $replace-taulukkoon, ja korvaus sovelletaan kaikkiin julkaisuihin lennossa. Toimii nopeammin kuin haku- ja korvausliitännäiset, mutta muista: tämä on suodatin, alkuperäinen sisältö tietokannassa säilyy muuttumattomana.

Tulostusmallit JoomSportin mukautetuille tyypeille

JoomSport rekisteröi useita mukautettuja julkaisutyyppejä, kuten joomsport_player, joomsport_season ja joomsport_match. Oletuksena ne renderöidään teeman single.php-tiedoston kautta, ja tämä näyttää melkein aina sekavalta.

Ratkaisu on luoda erillinen mallipohja. "player"-tyypille:

1single-joomsport_player.php

Tiedosto sijoitetaan teeman juureen. Nimeäminen noudattaa WordPressin mallihierarkian sääntöä: single-{slug}.php. Vastaavasti: single-joomsport_season.php kausille, single-joomsport_match.php otteluille.

Ota tiedoston sisältö teemasi single.php-tiedostosta ja mukauta se tarvitsemaasi rakenteeseen. Esimerkiksi Cactus-teemalle yksinkertainen pelaajasivun malli näyttää tältä:

1<?php
2/* Template Name: Post joomsport_player */
3
4get_header();
5
6$page_sidebar_layout = apply_filters('cactus_page_sidebar_layout', cactus_option('page_sidebar_layout'));
7switch ($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

Kopioi tämä koodi ja korvaa CSS-luokat ja -koukut niillä, joita teemasi käyttää. Ratkaisevaa on rakenne: header, container, sidebar (valinnainen), pääsilmukka ja footer.

Nopeaa aloitusta varten katso BearDevin virallinen opasvideo: 11 minuuttia, jotka säästävät sinulta parin tunnin asennustyön.

⁉️🤔 Usein kysytyt kysymykset

Toimivatko nämä korjaukset JoomSportin PRO-versiossa?

Kyllä, kaikki koodinpätkät ovat yleispäteviä ja ne on testattu myös PRO-versiossa. save_post_joomsport_*-koukut ja metakentät ovat identtiset ilmaisessa ja maksullisessa versiossa. Ainoa vivahde: PRO-versio lisää omia custom post type -tyyppejään, joten tarkista polkutunnus ennen kuvaketuen lisäämistä.

Mitä teen, jos lisäosa lakkaa toimimasta muokkauksen jälkeen?

Palauta muutokset: kaikki muokkaukset tehdään teeman functions.php-tiedostoon tai erillisiin mallipohjatiedostoihin, lisäosan ydintä ei muuteta. Poikkeuksena ovat tekijänoikeustietojen poisto ja sivutuksen korjaus: ne edellyttävät lisäosan omien tiedostojen muokkaamista, ja ne korvautuvat päivityksen yhteydessä. Ennen muokkausten tekemistä varmuuskopioi muokattava tiedosto.

Voinko käyttää näitä funktioita muiden lisäosien post type -tyypeille?

Kyllä, lähestymistapa on yleispätevä. Korvaa joomsport_player tarvitsemasi custom-tyypin polkutunnuksella ja _joomsport_player_ef sen metakentällä. Runkokoodin (save_post-koukulla varustetun kääreen) ja tarkistuslogiikan (get_post_metaforeach → ehto) voi käyttää sellaisenaan uudelleen.

Miten lisään kuvaketuen kaikille JoomSport-tyypeille kerralla?

Kierrä polkutunnusten taulukko silmukassa:

1$joomsport_types = ['joomsport_player', 'joomsport_season', 'joomsport_match', 'joomsport_team'];
2foreach ($joomsport_types as $type) {
3 add_post_type_support($type, 'thumbnail');
4}

Katso lisäosan kaikki custom-tyypit sen asetuksista tai käytä var_dump(get_post_types()).

Miksi JoomSportin lisäkenttiä ei kannata käyttää suodattamiseen?

JoomSport dumppaa kaikki lisäkenttien arvot yhteen taulukkoon. Tietyn kentän hakeminen frontendistä (esimerkiksi AJAX-suodatuksen aikana) on käytännössä mahdotonta, koska data on ketjutettua. Jos haluat suodattaa pelaajia iän, sukunimen alkukirjaimen tai minkä tahansa muun kriteerin mukaan, tallenna arvo erilliseen metakenttään, kuten age_field- ja First_letter_Last_Name-osioissa on esitetty.

Kannattaako JoomSportia käyttää projektiisi?

JoomSport on kapean alan mutta tehokas työkalu. Jos tarvitset urheiluliigasivuston, jossa on taulukoita, otteluohjelmia ja profiileja, vaihtoehdot WordPressissä ovat suoraan sanottuna vähissä. Lisäosaa kehitetään aktiivisesti: kesäkuussa 2026 uusin versio on 5.7.8, ja kehittäjät paikkaavat haavoittuvuudet ja lisäävät ominaisuuksia ripeästi.

Heikko kohta on oppimiskäyrä. Alkuasetukset vaativat kärsivällisyyttä, ja osa lisäosan toiminnasta on suunniteltu enemmän kehittäjiä kuin tavallisia käyttäjiä varten. Mutta beardevin tuki on aidosti hyvää: jokaiseen tukipyyntöön saa yksityiskohtaisen vastauksen, usein valmiin koodinpätkän kera.

Jos projektisi liittyy urheiluun ja budjettisi on rajallinen, valitse JoomSport ja varaa aikaa räätälöintiin. Tämän artikkelin koodi ratkaisee suurimman osan tyypillisistä ongelmista, joita kehittäjät kohtaavat integroidessaan lisäosaa tuotantosivustoon.

🔗 JoomSport WordPress.orgissa🔗 JoomSportin virallinen sivusto