Skip to content

Alt om WordPress, webutvikling — og mer til

🐛 WordPress og JoomSport: fikse feil og tilpasse plugin-en

🐛 WordPress og JoomSport: fikse feil og tilpasse plugin-en

Idrettsnettsteder på WordPress er en sjelden rase. Da et tennisforbund trengte et nettsted med kampoppsett, turneringstabeller og spillerprofiler, viste plugin-alternativene seg å være frustrerende begrensede. JoomSport PRO ble det eneste brukbare valget, men selv det krevde betydelig innsats.

Pluginen har en bratt læringskurve: det tar tid å konfigurere den for en bestemt idrett, og enkelte steder oppfører koden seg som om den ikke var skrevet for erfarne WordPress-brukere. På den annen side har JoomSport et sterkt supportteam som svarer på hver eneste supportforespørsel, og det er et solid pluss når du tilpasser pluginen til et prosjekt.

Nedenfor finner du en samling testede rettelser og kodebiter hentet fra et reelt prosjekt. De løser konkrete problemer: fra irriterende opphavsrettsmerknader til innholdsfiltrering og utdatamaler. Alle kodefragmenter er oppdatert for JoomSport versjon 5.7.x (per juni 2026, 5.7.8).

💡 Rask oversikt:

  • Fjerne pluginens opphavsrettsmerknad: én linje i malen
  • Rette paginering og divisjon med null-feilen
  • Legge til miniatyrbildestøtte for JoomSport-innlegg
  • Skrive en funksjon for automatisk å legge til utvalgte bilder i galleriet
  • Beregne og lagre spillerens alder i et metafelt
  • Lagre første bokstav i etternavnet for sortering
  • Lage utdatamaler for egendefinerte innleggstyper

Fjerne JoomSports opphavsrettsmerknad

I gratisversjonen viser pluginen en «powered by JoomSport»-lenke i bunnteksten på sesongsider. En liten ting, men det ser malplassert ut på en kundes nettside.

Fil som skal redigeres:

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

Rundt linje 79, finn og fjern linjen som inneholder lenken til joomsport.com. Etter en plugin-oppdatering må du gjenta denne rettelsen, så ha det i bakhodet når du setter opp automatiske oppdateringer.

Rette pagineringsfeilen

Hvis denne advarselen dukker opp i loggene dine:

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

, forsøker pluginen å dividere med null når den beregner sider. Problemet oppstår når variabelen $limit er udefinert eller lik null.

Fil:

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

Finn linje 70:

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

Erstatt med:

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

Ved å pakke divisjonen inn i en sjekk: hvis $limit ikke er satt eller er lik null, utføres ikke beregningen, og feilen forsvinner.

Legge til miniatyrbildestøtte for JoomSport-innlegg

Som standard støtter ikke JoomSports egendefinerte innleggstyper (joomsport_player, joomsport_season og andre) miniatyrbilder. Uten dette kan du ikke bygge et skikkelig galleri eller spillerprofilkort.

Legg til i temaets functions.php:

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

Nå vil standardblokken «Utvalgt bilde» vises i administrasjonspanelet for spillere og sesonger. På samme måte kan du legge til miniatyrbildestøtte for enhver egendefinert JoomSport-type ved å bytte ut den aktuelle slug-en.

Rammeverk for JoomSports databehandlingsfunksjoner

Alle de følgende kodebitene fungerer innenfor én enkelt save_post-hook. Den utløses når et innlegg lagres og lar deg automatisk fylle ut metafelter.

Opprett denne wrapperen i functions.php:

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-hooken sørger for at koden bare kjøres når du lagrer innlegg av typen «player». For andre typer (joomsport_season, joomsport_match), endre suffikset.

Legg til utvalgt bilde i galleriet automatisk

Når du har dusinvis av spillere, blir det tidkrevende å legge til bilder manuelt i JoomSport-galleriet. Her er en funksjon som automatisk henter ID-en til det utvalgte bildet når et innlegg lagres, og legger det 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
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}

Logikken er enkel: hent ID-en til det utvalgte bildet, sjekk om det allerede finnes i vdw_gallery_id-metafeltet. Hvis ikke, legg det til. Hvis det finnes, hopp over for å unngå duplikater.

Beregn spillerens alder i et metafelt

JoomSport lagrer spillerens fødselsdato i metafeltet _joomsport_player_ef. For å vise alder på nettstedet må du beregne og lagre den først. Koden er basert på en løsning fra StackExchange og ACF-dokumentasjonen.

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);

Fødselsdatoen er lagret i det fjerde elementet i arrayen (indeks [3]) i metafeltet _joomsport_player_ef. Funksjonen henter den ut, beregner alderen og skriver den til et eget age_field-metafelt, som deretter kan brukes i maler eller til filtrering.

Lagre første bokstav i etternavnet

For å sortere spillere alfabetisk eller for raskt søk, er det praktisk å ha et eget felt med første bokstav i etternavnet. JoomSport lagrer fornavn og etternavn i metafeltet _joomsport_player_personal.

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 med flagget PREG_SPLIT_NO_EMPTY deler en UTF-8-streng korrekt opp i tegn, inkludert kyrilliske. Det første tegnet i etternavnsarrayen lagres i metafeltet First_letter_Last_Name.

Søk og erstatt tekst på hele nettstedet

En universell kodesnutt for masseerstatning av tekst i innhold og utdrag. Nyttig ikke bare for JoomSport; bruk den til alle globale redigeringer.

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');

Legg dine egne par i $replace-arrayen, så vil erstatningen gjelde for alle innlegg i sanntid. Fungerer raskere enn søk-og-erstatt-plugins, men husk: dette er et filter, originalinnholdet i databasen forblir uendret.

Utskriftsmaler for JoomSports egendefinerte typer

JoomSport registrerer flere egendefinerte innleggstyper, inkludert joomsport_player, joomsport_season og joomsport_match. Som standard vises de gjennom temaets single.php, og dette ser nesten alltid rotete ut.

Løsningen er å opprette en egen mal. For typen «player»:

1single-joomsport_player.php

Filen plasseres i temaroten. Navngivningen følger WordPress sin malhierarki-regel: single-{slug}.php. Tilsvarende: single-joomsport_season.php for sesonger, single-joomsport_match.php for kamper.

Ta filinnholdet fra temaets single.php og tilpass det til strukturen du trenger. For eksempel, for Cactus-temaet ser en grunnleggende spillerprofilmal slik ut:

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

Kopier denne koden og bytt ut CSS-klassene og krokene med de temaet ditt bruker. Nøkkelen er strukturen: header, container, sidebar (valgfritt), hovedløkke og footer.

For en rask start med plugin-en, se den offisielle veiledningen fra BearDev: 11 minutter som vil spare deg for et par timers oppsett.

⁉️🤔 Ofte stilte spørsmål

Fungerer disse fiksene på PRO-versjonen av JoomSport?

Ja, alle kodesnuttene er universelle og har blitt testet på PRO-versjonen også. save_post_joomsport_*-hookene og metafeltene er identiske i gratis- og betalingsversjonen. Den eneste nyansen: PRO-versjonen legger til sine egne tilpassede innholdstyper, så sjekk slug-en før du legger til støtte for utvalgte bilder.

Hva bør jeg gjøre hvis plugin-en slutter å virke etter en redigering?

Rull tilbake endringene: alle redigeringer gjøres i temaets functions.php eller i separate malfiler; plugin-ens kjerne påvirkes ikke. Unntakene er fjerning av opphavsrett og fiks av paginering: disse innebærer redigering av plugin-ens egne filer, og de vil bli overskrevet ved oppdatering. Før du gjør noen redigeringer, ta sikkerhetskopi av filen du endrer.

Kan jeg bruke disse funksjonene for innholdstyper fra andre plugin-er?

Ja, tilnærmingen er universell. Bytt ut joomsport_player med slug-en for den tilpassede typen du trenger, og _joomsport_player_ef med metafeltet dens. Rammeverkskoden (wrapperen med save_post-hooken) og sjekklogikken (get_post_metaforeach → betingelse) kan gjenbrukes nøyaktig slik de er skrevet.

Hvordan legger jeg til støtte for utvalgte bilder for alle JoomSport-typer samtidig?

Gå gjennom en matrise med slug-er:

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

For en liste over alle plugin-ens tilpassede typer, sjekk innstillingene dens eller bruk var_dump(get_post_types()).

Hvorfor bør jeg ikke bruke JoomSports ekstrafelt for filtrering?

JoomSport dumper alle ekstrafeltverdier inn i én enkelt matrise. Å få tilgang til et spesifikt felt fra frontend (for eksempel under AJAX-filtrering) er praktisk talt umulig fordi dataene er sammenkjedet. Hvis du trenger å filtrere spillere etter alder, forbokstav eller et annet kriterium, lagre verdien i et separat metafelt, som vist i avsnittene om age_field og First_letter_Last_Name.

Bør du bruke JoomSport til prosjektet ditt?

JoomSport er et nisjeverktøy, men kraftfullt. Hvis du trenger et nettsted for sportsligaer med tabeller, terminlister og profiler, er alternativene på WordPress ærlig talt få. Plugin-en er under aktiv utvikling: per juni 2026 er gjeldende versjon 5.7.8, og utviklerne tetter sårbarheter og legger til funksjoner raskt.

Det svake punktet er læringskurven. Førstegangsoppsett krever tålmodighet, og noe av plugin-ens oppførsel er utformet mer for utviklere enn for vanlige brukere. Men supporten fra beardev er genuint god: hver henvendelse til brukerstøtten får et detaljert svar, ofte med en ferdig kodesnutt.

Hvis prosjektet ditt er sportsrelatert og budsjettet er begrenset, velg JoomSport og sett av tid til tilpasning. Koden i denne artikkelen vil løse de fleste typiske problemene utviklere møter når de integrerer plugin-en i et produksjonsnettsted.

🔗 JoomSport på WordPress.org🔗 Offisielt JoomSport-nettsted