Jak přidat sloupec do výpisu vlastních článků

Vycházejme z toho, že máme vlastní typ příspěvku (CPT), třeba course. Ukládáme tak školení. Každý příspěvek má vlastní uživatelská pole (custom fields, CF), mezi nimi také datum, kdy školení začíná. Jak ho zobrazit v přehledu všech školení?

Tam se totiž zobrazuje jen datum vytvoření samotného příspěvku, nikoliv další datum, které jsme si připojili a má význam jen pro nás (nikoliv pro WordPress). A abychom to měli ještě praktičtější, což takhle si zobrazit i místo konání?

Základní zobrazení vlastních článků
Základní zobrazení vlastních článků

Každý záznam o školení má kromě běžného názvu a popisu také další pole:

  • Místo školení
  • Od (datum)
  • Do (datum)
  • Od (čas)
  • Do (čas)
  • Stav (volno, obsazeno, archivováno)
Editace konkrétního školení
Editace konkrétního školení

Do přehledu všech školení tedy chceme přidat doplňující sloupce, které nám na první pohled poskytnou více informací.

Sloupce přidané do výpisu
Sloupce přidané do výpisu

Úprava kódu

Změn dosáhneme použitím vlastních rutin pro hooky. Oba hooky mají svůj název odvozený od názvu vašeho CPT. Zde je použit CPT courses, místo něj dosaďte svůj, názvy použitých hooků jsou

  • manage_courses_posts_columns – vytvoření sloupců
  • manage_courses_posts_custom_column – plnění sloupců daty

Přidání sloupce

Naše rutina přidá do pole sloupců další dva se záhlavím Datum konání a Místo:

add_action( 'manage_courses_posts_columns' , 'crs_display_date_column');

function crs_display_date_column( $columns ) {
	return array_merge($columns,
	array(
		'course_date' => 'Datum konání',
		'course_place' => 'Místo'
		)
	);
}

Zobrazení dat ve sloupci

Při navěšování této rutiny na hook určujeme, že má vyšší prioritu (10) a má dva argumenty. Rutina se spouští na každý prvek pole ve sloupci, pokaždé tedy získáváme data konkrétního z nich (ano, i těch již existujících). Odchytneme si tedy podmínkou ta naše a pomocí $post_id (šla by použít i globální proměnná $post) načteme požadovaná custom fields (date_from, date_to, place), která ukládáme při vytváření příspěvku (na obrázku výše). V případě, že se datum konce školení liší od začátku, zobrazíme je jako interval.

add_action( 'manage_courses_posts_custom_column' , 'crs_custom_courses_column', 10, 2 );

function crs_custom_courses_column( $column, $post_id ) {
	switch ( $column ) {

		case 'course_date' :
			$datef = sanitize_text_field(get_post_meta($post_id, 'date_from', true));
			$datet = sanitize_text_field(get_post_meta($post_id, 'date_to', true));
			/* Zde předpokládáme, že datum je uloženo jako řetězec, což je sice špatně, 
		ale pro ukázkový příklad to postačuje; no.. někdy i pro praxi ;-) */
			echo($datef);
			if ((!empty($datet)) AND (strcmp($datef, $datet) !== 0)) { echo('–' . $datet); }
			break;
		case 'course_place':
		$place = sanitize_text_field(get_post_meta($post_id, 'place', true));
		echo($place);

	}
}

Tento kód se umisťuje do samostatného pluginu nebo do functions.php v šabloně. Samozřejmě by ho šlo rozvíjet a vymýšlet další vylepšení, ale o tom až jindy.

Newsletter Rádce pro správce

Každou středu rozesíláme část svého know-how, které jsme pracně získali během posledních let. Zadarmo každému, kdo má zájem stát se zkušeným správcem WordPressu. Není určený našim zákazníkům, nýbrž našim kolegům v oboru. Vracíme tak komunitě to, co jsme získali od jiných. Podívejte se do jeho archivu.