| | |
| | | |
| | | private static array $instances = []; |
| | | |
| | | protected string $based; |
| | | private function __construct(string $slug, string $singular, string $plural, string $type) { |
| | | $this->slug = $slug; |
| | | $this->based = jvbCheckBase($slug); |
| | | $this->type = $type; |
| | | $this->singular = $singular; |
| | | $this->plural = $plural; |
| | |
| | | return $this->slug; |
| | | } |
| | | |
| | | public function getBased():string |
| | | { |
| | | return $this->based; |
| | | } |
| | | |
| | | public function setTimeline(bool $set):self |
| | | { |
| | | $this->is_timeline = $set; |
| | |
| | | } |
| | | wp_reset_postdata(); |
| | | } |
| | | |
| | | add_filter('jvb_post_content_output', [$this, 'renderContent'], 20, 2); |
| | | |
| | | |
| | | //Add a date published and date modified fields, and auto-update them on term creation/modification |
| | | $this->fields()->addField('date_published', [ |
| | | 'type' => 'datetime', |
| | | 'label' => 'Published', |
| | | 'hidden' => true, |
| | | ]); |
| | | $this->fields()->addField('date_modified', [ |
| | | 'type' => 'datetime', |
| | | 'label' => 'Modified', |
| | | 'hidden' => true, |
| | | ]); |
| | | add_action('created_'.$this->based, [$this, 'addTermCreatedMeta']); |
| | | add_action('edited_'.$this->based, [$this, 'addTermUpdatedMeta']); |
| | | } |
| | | public function addTermCreatedMeta(int $termId):void |
| | | { |
| | | $meta = Meta::forTerm($termId); |
| | | $meta->set('date_published', date('Y-m-d H:i:s')); |
| | | } |
| | | public function handleContentTermMetaChange(int $meta_id, int $term_id, string $meta_key, $meta_value):void |
| | | { |
| | | $term = get_term($term_id); |
| | | $taxonomy = $term->taxonomy; |
| | | if ($taxonomy === $this->based && $meta_key !== BASE . 'date_modified') { |
| | | $meta = Meta::forTerm($term_id); |
| | | $meta->set('date_modified', date('Y-m-d H:i:s')); |
| | | } |
| | | |
| | | } |
| | | public function addTermUpdatedMeta(int $termId):void |
| | | { |
| | | $meta = Meta::forTerm($termId); |
| | | $meta->set('date_modified', date('Y-m-d H:i:s')); |
| | | } |
| | | public function renderContent(string $content, array $block):string |
| | | { |
| | | if (!is_page($this->page)) { |
| | |
| | | $meta = Meta::forTerm($item); |
| | | $slug = sanitize_title($meta->get('name')); |
| | | $item = sprintf( |
| | | '<li id="%s"><h3><a href="%s">%s</a></h3><p>%s</p><ul>', |
| | | '<li id="%s"><h2><a href="%s">%s</a></h2><p>%s</p><ul class="item-grid">', |
| | | $slug, |
| | | get_term_link($item, jvbCheckBase($this->slug))??'', |
| | | $meta->get('name'), |
| | |
| | | $img = $postMeta->get('post_thumbnail'); |
| | | $img = !empty($img) ? jvbFormatImage((int)$img, 'tiny', 'medium') : ''; |
| | | $item .= sprintf( |
| | | '<li id="%s"><h4><a href="%s">%s</a></h4>%s</li>', |
| | | '<li id="%s" class="item"><h3><a href="%s">%s</a></h3>%s</li>', |
| | | $slug.'-'.sanitize_title(get_the_title($ID)), |
| | | get_the_permalink($ID), |
| | | $postMeta->get('post_title'), |