Twenty Twenty -teeman artikkelien otsakkeen muuttaminen

Halusin Twenty Twenty -teemaan pienen muutoksen artikkelien otsaketietoihin. Oletuksena otsakkeessa näytetään artikkelin luontipäivämäärä, mutta Lautapelioppaassa on olennaista myös se, milloin artikkelia on päivitetty.

Artikkelin otsaketiedot tulevat twentytwenty_the_post_meta()-funktiosta, joka taas ei tee muuta kuin tulostaa sen, mitä twentytwenty_get_post_meta()-funktio luo. Tämä on sen verran pitkä ja monimutkainen funktio, ettei sitä kannata lähteä kirjoittamaan uudestaan, jos haluaa tehdä vain pienen muutoksen, joten päätin ratkaista asian korvaamalla twentytwenty_the_post_meta()-funktion omalla funktiolla, joka ottaa otsaketiedot, tekee niihin halutut muutokset ja tulostaa sitten.

Otsaketiedot pelkällä luontipäivämäärällä
Lähtötilanne

Muutokset sivupohjiin

Tämä vaatii ensinnäkin sen, että lapsiteemaan luodaan template-parts/entry-header.php -tiedosto kopioimalla se pääteemasta ja muutetaan twentytwenty_the_post_meta()-funktio nimelle lautapeliopas_the_post_meta().

Tässä kohtaa olisi mukava, jos muutos onnistui jollain tavalla, joka muuttaisi vain tuon yhden funktion, mutta sellaista mahdollisuutta ei nyt ole käsillä. Jos pääteema päivittyy, on hyvä muistaa vilkuille entry-header.php:n mahdolliset päivitykset läpi ja päivittää ne lapsiteemaan tarvittaessa.

Oma funktio

Oma funktioni näyttää tältä:

/**
 * Get and Output Post Meta.
 * If it's a single post, output the post meta values specified in the Customizer settings.
 *
 * @param int    $post_id The ID of the post for which the post meta should be output.
 * @param string $location Which post meta location to output – single or preview.
 */
function lautapeliopas_the_post_meta( $post_id = null, $location = 'single-top' ) {
	$post_meta_header = twentytwenty_get_post_meta( $post_id, $location ); //phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Escaped in twentytwenty_get_post_meta().

	$created  = get_the_time( 'U', $post_id );
	$modified = get_the_modified_time( 'U', $post_id );

	if ( $created !== $modified ) {
		ob_start();
		?>
		<li class="post-date meta-wrapper">
			<span class="meta-icon">
				<span class="screen-reader-text"><?php _e( 'Post date', 'twentytwenty' ); ?></span>
				<?php twentytwenty_the_theme_svg( 'calendar' ); ?>
			</span>
			<span class="meta-text">
				<a href="<?php the_permalink(); ?>"><?php the_time( get_option( 'date_format' ) ); ?>
          		<span class="paivitetty">(päivitetty <?php the_modified_time( get_option( 'date_format' ) ); ?>)</span></a>
			</span>
		</li>
		<?php
		$post_date = ob_get_clean();

		$post_meta_header = preg_replace( '/<li class="post-date.*?li>/s', $post_date, $post_meta_header );
	}

	echo $post_meta_header;
}

Käydään vaihe kerrallaan läpi. Ensiksi haetaan oletusotsake muuttujaan $post_meta_header.

Koska muutos koskee vain artikkeleita, joita on muokattu, tarkistetaan eroaako viimeisimmän muokkauksen päivämäärä luontipäivästä. Jos päivämäärät ovat samat, mitään muutoksia ei tarvita.

Jos muutoksia tarvitaan, luodaan korjattu versio päivämäärätiedoista. Malli on kopioitu suoraan twentytwenty_get_post_meta():sta, lisäsin vain kohdan

<span class="paivitetty">(päivitetty <?php the_modified_time( get_option( 'date_format' ) ); ?>)</span>

joka tulostaa muokkauspäivämäärän.

Koska koodissa käytetään suoraan tulostavia funktioita (the_time() ja muut), tuloste napataan talteen output bufferilla eli ob_start(); ja sitten $post_date = ob_get_clean();.

Lopuksi vanha päivämäärätieto eli <li class="post-date">...</li> korvataan itse luodulla. Lopputulos näyttää nyt siltä miltä pitää:

Otsaketieto päivityspäiväkentän kanssa.

Vastaa

Sähköpostiosoitettasi ei julkaista.

This site uses Akismet to reduce spam. Learn how your comment data is processed.