Blog

Udvidelse af theme.json til brugerdefinerede indlægstyper og plugin-output: En praktisk guide

Lær, hvordan du anvender theme.json-indstillinger på brugerdefinerede indlægstyper og plugin-indhold for et ensartet design på tværs af dit WordPress-site.

Resumé

Mange WordPress-udviklere bygger brugerdefinerede indlægstyper eller plugins, der udsender indhold (f.eks. udtalelser, porteføljer). Men theme.json – den centrale konfiguration for globale styles – ignorerer ofte disse brugerdefinerede elementer som standard, hvilket fører til et uensartet design. Denne artikel guider dig gennem registrering af brugerdefinerede indlægstyper til at arve theme.json-styles, tilsidesættelse af indstillinger for specifikke blokke og brobygning mellem plugin-output og kernedesign-tokens. Du får trin-for-trin-instruktioner, virkelige eksempler som styling af en 'Team Member'-CPT og advarsler om ydeevne og tredjepartskonflikter. Til sidst kan du sikre, at ethvert brugerdefineret indhold matcher dit sides editor-definerede designsystem.

Har du nogensinde bygget en brugerdefineret indlægstype eller integreret et tredjepartsplugin, kun for at opdage, at outputtet fuldstændig ignorerer det smukke designsystem, du omhyggeligt har konfigureret i theme.json? Du er ikke alene. Som standard gælder theme.json kun for kerne-WordPress-blokke og registrerede blokstyles, hvilket efterlader brugerdefinerede indlægstyper og plugin-genereret indhold til sig selv. Dette resulterer typisk i inline CSS, duplikerede font-stakke eller en uensartet farvepalet, der bryder brugeroplevelsen. Men der er en bedre måde: du kan udvide theme.json til at dække disse brugerdefinerede elementer og sikre et konsistent, vedligeholdeligt designsystem på tværs af hele dit site. I denne guide gennemgår vi fire praktiske trin for at opnå dette, komplet med kodeeksempler og virkelige advarsler.

Forståelse af theme.json's rækkevidde

Før vi dykker ned, er det afgørende at forstå, at theme.json er et bloktemakoncept. Det definerer globale styles, indstillinger (som farvepaletter og skriftstørrelser) og blokspecifikke styles til blokeditoren og frontenden. Dog er dens rækkevidde begrænset: den styrer kun blokke, der eksplicit erklærer understøttelse af theme.json-egenskaber via register_block_type eller den ældre add_theme_support. Brugerdefinerede indlægstyper oprettet med register_post_type arver ikke automatisk disse styles, medmindre de er bygget med blokke eller eksplicit stylet.

Trin 1: Registrering af brugerdefinerede indlægstyper med understøttelse af blokeditor

Det første skridt er at sikre, at din brugerdefinerede indlægstype bruger blokeditoren. Når du kalder register_post_type, skal du sætte 'show_in_rest' => true og inkludere 'editor' i supports-arrayet. Dette aktiverer blokeditoren for den pågældende indlægstype, så forfattere kan bruge blokniveau-styles fra theme.json. For eksempel, her er en 'Team Member'-CPT:

function create_team_member_cpt() {
    $args = array(
        'public' => true,
        'show_in_rest' => true,
        'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ),
        'show_in_menu' => true,
        'labels' => array(
            'name' => 'Team Members',
            'singular_name' => 'Team Member',
        ),
        'rewrite' => array( 'slug' => 'team' ),
    );
    register_post_type( 'team_member', $args );
}
add_action( 'init', 'create_team_member_cpt' );

Nu, når du redigerer et team member-indlæg, vil du se blokeditoren med dit temas globale styles anvendt på kerneblokke som Afsnit, Overskrift og Billede. Dette alene løser ofte de fleste stylingproblemer. Hvis du har brug for mere granulær kontrol, fortsæt til næste trin. For en dybere udforskning af at bygge bloktemaer med theme.json, se Sådan bygger du et brugerdefineret WordPress-bloktema med theme.json.

Trin 2: Tilføjelse af brugerdefinerede blokstyles via theme.json

Nogle gange vil du anvende specifikke styles på alle forekomster af din brugerdefinerede indlægstypes indhold – for eksempel at give hele indlægget en baggrundsfarve eller særlig margin. Du kan målrette core/post-content eller indpakke dit indhold i en brugerdefineret gruppeblok og style den via theme.json. Tilføj følgende til din theme.json-fil under styles-objektet:

{
  "styles": {
    "blocks": {
      "core/post-content": {
        "css": "background-color: var(--wp--preset--color--light); padding: 2rem;"
      }
    }
  }
}

Dette vil anvende en lys baggrund og padding på indholdsområdet for alle indlæg, inklusive din Team Member-CPT. Du kan også definere blokspecifikke variationer inde i settings.blocks for at give stilindstillinger i editoren.

Trin 3: Brug af theme.json's brugerdefinerede egenskaber til plugin-output

Plugins udsender ofte indhold via shortcodes, widgets eller brugerdefinerede blokke. For at style disse konsekvent, udnyt CSS-brugerdefinerede egenskaber, som theme.json genererer. For eksempel, hvis dit tema definerer en primær farve som --wp--preset--color--primary, kan du bruge den i dit plugins CSS:

.my-plugin-button {
    background-color: var(--wp--preset--color--primary);
    font-size: var(--wp--preset--font-size--medium);
}

Dette sikrer, at når siteadministratoren ændrer farvepaletten i theme.json, opdateres din plugins knap automatisk. For at gøre dette robust, brug altid de foruddefinerede CSS-variabler i stedet for at hardkode værdier. Derudover, hvis dit plugin registrerer sine egne blokke, kan du arve theme.json-indstillinger ved at bruge useSetting i JavaScript eller sende $attributes i PHP-gengivelse, som beskrevet i Mestring af WordPress dynamiske blokke.

Trin 4: Håndtering af dynamiske blokke

For brugerdefinerede blokke, der udsender dynamisk indhold (f.eks. en udtalelses-slider), skal du registrere blokken med blokeditorunderstøttelse og eksplicit knytte den til theme.json. I PHP, brug register_block_type med $args, der inkluderer 'render_callback', og sørg for, at din bloks block.json-fil sætter 'supports' => array( 'color' => true, 'typography' => true ). Derefter, i din render-callback, kan du få adgang til de globale styles via wp_get_global_styles() og anvende dem. For eksempel:

function render_testimonial_block( $attributes, $content ) {
    $styles = wp_get_global_styles();
    $color = $styles['elements']['link']['color']['text'] ?? '#000';
    return '<div style="color: ' . esc_attr( $color ) . ';">' . $content . '</div>';
}

Denne tilgang sikrer, at din brugerdefinerede blok respekterer temaets designtokens. For mere om blokregistrering, se Opbygning af robuste WordPress-plugins.

Advarsler

Selvom udvidelse af theme.json er kraftfuld, skal du være opmærksom på disse faldgruber:

  1. Ydeevne: At tilføje for mange brugerdefinerede styles i theme.json kan oppuste filen og øge CSS-parsing-tiden. Hold dig til globale indstillinger og brug blokspecifikke styles sparsomt.
  2. Pluginkonflikter: Nogle plugins nulstiller eller tilsidesætter theme.json-indstillinger. Test altid med et minimalt pluginsæt og overvej at hooke ind i after_setup_theme for at genanvende dine tilpasninger.
  3. Klassiske temaer: Hvis dit tema ikke bruger blokeditoren (dvs. det er et klassisk tema), har theme.json begrænset effekt. Overvej at migrere til et bloktema eller brug funktionen wp_enqueue_global_styles til at indlæse styles.
  4. Browser-cache: Ændringer i theme.json vises muligvis ikke med det samme på grund af caching. Ryd browser-cache og brug versionering af dit stylesheet.

Konklusion

Nu har du en klar køreplan for at få brugerdefinerede indlægstyper og plugin-output til at spille godt sammen med dit theme.json-designsystem. Nøglen er at registrere din CPT med blokeditorunderstøttelse, definere specifikke styles for indholdsblokken, bruge CSS-brugerdefinerede egenskaber i plugin-output og registrere dine brugerdefinerede blokke med korrekt theme.json-integration. Denne tilgang eliminerer uensartethed, reducerer vedligeholdelse og giver siteadministratorer magten til at kontrollere udseende og fornemmelse fra en enkelt kilde til sandhed. Begynd at implementere disse trin i dag for at skabe sammenhæng i dine WordPress-projekter.

Sources (5)