
🐛 WordPress och JoomSport: fixa buggar och anpassa pluginet
Sportwebbplatser på WordPress är en ovanlig sort. När ett tennisförbund behövde en sajt med matchschema, turneringstabeller och spelarprofiler visade sig plugin-alternativen vara frustrerande begränsade. JoomSport PRO blev det enda rimliga valet, men även det krävde en hel del arbete.
Pluginet har en brant inlärningskurva: att konfigurera det för en specifik sport tar tid, och på vissa ställen beter sig koden som om den inte var skriven för erfarna WordPress-användare. Å andra sidan har JoomSport ett starkt supportteam som svarar på varje helpdesk-förfrågan, och det är ett rejält plus när du anpassar pluginet för ett projekt.
Här nedan följer en samling testade korrigeringar och kodsnuttar från ett verkligt projekt. De löser specifika problem: från irriterande copyright-notiser till innehållsfiltrering och utdataramar. Alla kodfragment är aktuella för JoomSport version 5.7.x (från och med juni 2026, 5.7.8).
💡 Snabb översikt:
- Ta bort pluginets copyright: en rad i mallen
- Åtgärda paginering och division med noll-felet
- Lägga till stöd för utvalda bilder för JoomSport-inlägg
- Skriva en funktion för att automatiskt lägga till utvalda bilder i galleriet
- Beräkna och spara spelarens ålder i ett meta-fält
- Spara första bokstaven i efternamnet för sortering
- Skapa utdataramar för anpassade inläggstyper
Ta bort JoomSports copyright
I gratisversionen visar pluginet en "powered by JoomSport"-länk i sidfoten på säsongssidor. En liten sak, men den ser malplacerad ut på en kundsajt.
Fil att redigera:
1 /wp-content/plugins/joomsport-sports-league-results-management/sportleague/views/default/season.php
Runt rad 79, hitta och ta bort raden som innehåller länken till joomsport.com. Efter en plugin-uppdatering måste du upprepa den här korrigeringen, så ha det i åtanke när du ställer in automatiska uppdateringar.
Åtgärda pagineringsfelet
Om den här varningen dyker upp i dina loggar:
Warning: Division by zero in.../class-jsport-pagination.php on line 72
, försöker pluginet dividera med noll när det beräknar sidor. Problemet uppstår när variabeln $limit är odefinierad eller lika med noll.
Fil:
1 /wp-content/plugins/joomsport-sports-league-results-management/sportleague/classes/class-jsport-pagination.php
Hitta rad 70:
1 $npage = ceil($this->setcurrent / $limit);
Ersätt med:
1 if (isset($limit) && $limit > 0) { 2 $npage = ceil($this->setcurrent / $limit); 3 }
Divisionen läggs in i en kontroll: om $limit inte är satt eller är lika med noll körs beräkningen helt enkelt inte, och felet försvinner.
Lägga till stöd för utvalda bilder för JoomSport-inlägg
Som standard har JoomSports anpassade inläggstyper (joomsport_player, joomsport_season och andra) inte stöd för utvalda bilder. Utan detta kan du inte bygga ett riktigt galleri eller spelarkort.
Lägg till i ditt temas functions.php:
1 add_post_type_support('joomsport_player', 'thumbnail'); 2 add_post_type_support('joomsport_season', 'thumbnail');
Nu visas det vanliga "Utvald bild"-blocket i adminpanelen för spelare och säsonger. På samma sätt kan du lägga till stöd för utvalda bilder för vilken anpassad JoomSport-typ som helst genom att byta ut sluggen.
Ramverk för JoomSports databearbetningsfunktioner
Alla följande kodsnuttar fungerar inuti en enda save_post-hook. Den aktiveras när ett inlägg sparas och låter dig automatiskt fylla i meta-fält.
Skapa den här wrappern i functions.php:
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');
Kroken save_post_joomsport_player ser till att körningen bara sker när inlägg av typen "player" sparas. För andra typer (joomsport_season, joomsport_match), ändra suffixet.
Automatiskt lägga till utvald bild i galleriet
När du har dussintals spelare blir det tråkigt att manuellt lägga till bilder i JoomSports galleri. Här är en funktion som automatiskt hämtar den utvalda bildens ID när ett inlägg sparas och lägger till den först i galleriet:
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 }
Logiken är enkel: hämta ID:t för den utvalda bilden, kontrollera om det redan finns i metafältet vdw_gallery_id. Om inte, lägg till det. Om det finns, hoppa över det för att undvika dubbletter.
Beräkna spelarens ålder i ett metafält
JoomSport lagrar spelarens födelsedatum i metafältet _joomsport_player_ef. För att visa ålder på sajten måste du först beräkna och spara den. Koden bygger på en lösning från StackExchange och ACF-dokumentationen.
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);
Födelsedatumet lagras i det fjärde elementet i arrayen (index [3]) i metafältet _joomsport_player_ef. Funktionen extraherar det, beräknar åldern och skriver den till ett separat metafält age_field, som sedan kan användas i mallar eller för filtrering.
Spara första bokstaven i efternamnet
För att sortera spelare alfabetiskt eller för snabbsökning är det praktiskt att ha ett separat fält med första bokstaven i efternamnet. JoomSport lagrar för- och efternamn i metafältet _joomsport_player_personal.
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 med flaggan PREG_SPLIT_NO_EMPTY delar korrekt upp en UTF-8-sträng i tecken, inklusive kyrilliska. Det första tecknet i efternamnsarrayen sparas i metafältet First_letter_Last_Name.
Sök och ersätt text över hela sajten
Ett universellt kodsnutt för massersättning av text i innehåll och utdrag. Användbart inte bara för JoomSport; använd det för alla globala redigeringar.
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');
Lägg till dina egna par i arrayen $replace, så tillämpas ersättningen på alla inlägg i farten. Fungerar snabbare än sök-ersätt-plugins, men kom ihåg: detta är ett filter, originalinnehållet i databasen förblir oförändrat.
Utmatningsmallar för JoomSports anpassade typer
JoomSport registrerar flera anpassade inläggstyper, inklusive joomsport_player, joomsport_season och joomsport_match. Som standard renderas de via temats single.php, och detta ser nästan alltid slarvigt ut.
Lösningen är att skapa en separat mall. För typen "player":
1 single-joomsport_player.php
Filen placeras i temats rot. Namngivningen följer WordPress mallhierarki: single-{slug}.php. På samma sätt: single-joomsport_season.php för säsonger, single-joomsport_match.php för matcher.
Ta filinnehållet från ditt temas single.php och anpassa det till den struktur du behöver. För Cactus-temat ser till exempel en grundläggande spelarsidmall ut så här:
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
Kopiera den här koden och ersätt CSS-klasserna och hakar med de som ditt tema använder. Nyckeln är strukturen: header, container, sidebar (valfritt), main loop och footer.
För en snabbstart med pluginet, se den officiella handledningen från BearDev: 11 minuter som sparar dig ett par timmars konfiguration.
⁉️🤔 Vanliga frågor
Fungerar dessa fixar med PRO-versionen av JoomSport?
Ja, alla kodsnuttar är universella och har testats även på PRO-versionen. Hookarna
save_post_joomsport_*och metafälten är identiska i gratis- och betalversionen. Enda nyansen: PRO-versionen lägger till egna anpassade posttyper, så kontrollera sluggen innan du lägger till stöd för utvalda bilder.
Vad ska jag göra om pluginet slutar fungera efter en redigering?
Återställ ändringarna: alla redigeringar görs i temats
functions.phpeller i separata mallfiler; pluginets kärna påverkas inte. Undantagen är borttagning av copyright och fix av paginering: de innebär redigering av pluginets egna filer, och de skrivs över vid uppdatering. Innan du gör några redigeringar, säkerhetskopiera filen du ändrar.
Kan jag använda dessa funktioner för posttyper från andra plugins?
Ja, tillvägagångssättet är universellt. Ersätt
joomsport_playermed sluggen för den anpassade typ du behöver, och_joomsport_player_efmed dess metafält. Ramverkskoden (omslaget medsave_post-hooken) och kontrollogiken (get_post_meta→foreach→ villkor) kan återanvändas exakt som de är skrivna.
Hur lägger jag till stöd för utvalda bilder för alla JoomSport-typer på en gång?
Loopa genom en array med sluggar:
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 }
För en lista över alla pluginets anpassade typer, kontrollera dess inställningar eller använd
var_dump(get_post_types()).
Varför bör jag inte använda JoomSports extrafält för filtrering?
JoomSport dumpar alla extrafältsvärden i en enda array. Att komma åt ett specifikt fält från frontend (till exempel vid AJAX-filtrering) är praktiskt taget omöjligt eftersom datan är sammanfogad. Om du behöver filtrera spelare efter ålder, första bokstav eller något annat kriterium, spara värdet i ett separat metafält, som visas i avsnitten om
age_fieldochFirst_letter_Last_Name.
Bör du använda JoomSport för ditt projekt?
JoomSport är ett nischat men kraftfullt verktyg. Om du behöver en sajt för en sportliga med tabeller, spelscheman och profiler är alternativen på WordPress uppriktigt sagt få. Pluginet utvecklas aktivt: i juni 2026 är den aktuella versionen 5.7.8, och utvecklarna patchar sårbarheter och lägger till funktioner utan dröjsmål.
Den svaga punkten är inlärningskurvan. Första installationen kräver tålamod, och en del av pluginets beteende är utformat mer för utvecklare än för vanliga användare. Men supporten från beardev är genuint bra: varje helpdesk-meddelande får ett detaljerat svar, ofta med en färdig kodsnutt.
Om ditt projekt är sportrelaterat och din budget är begränsad, kör på JoomSport och avsätt tid för anpassning. Koden i den här artikeln löser de flesta typiska problem som utvecklare stöter på när de integrerar pluginet i en aktiv sajt.



