From a9b3b28d001941921aa70d37fdc87c758a163a44 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 05 Jun 2026 16:47:03 +0000
Subject: [PATCH] =Some hefty changes to FeedBlock. Transitioning to loading first page in php to save on extra requests. Got a bit to do yet, but I have to work on Northeh for a bit here.
---
inc/registrar/config/seo/Schema.php | 76 ++++++++++++++++---------------------
1 files changed, 33 insertions(+), 43 deletions(-)
diff --git a/inc/registrar/config/seo/Schema.php b/inc/registrar/config/seo/Schema.php
index 6b01794..86401cc 100644
--- a/inc/registrar/config/seo/Schema.php
+++ b/inc/registrar/config/seo/Schema.php
@@ -23,6 +23,7 @@
protected array $properties = [];
protected array $referenceProperties = [];
+ protected array $extras = [];
protected array $defaultReference = [
'name' => '{{post_title}}',
'url' => '{{post_permalink}}',
@@ -67,6 +68,8 @@
}
$this->defaultArchive['description'] = '{{registrar.'.$slug.'.description}}';
}
+
+ $this->extras = apply_filters(BASE.ucfirst($slug).'Extras', []);
$this->initFilters();
$this->registerHooks();
}
@@ -90,49 +93,8 @@
add_action('wp_head', [$this, 'outputSchema'], 1);
add_filter('the_seo_framework_schema_graph_data', [$this, 'filterTSFSchema'], 10, 2);
add_filter('the_seo_framework_title_from_custom_field', [$this, 'filterTSFOGTitle'], 10, 2);
-
- $this->maybeExcludeSingles();
}
- protected function maybeExcludeSingles(): void
- {
- $exclude = $this->cache->remember(
- 'excludeSingles',
- function () {
- $exclude = [];
- $registrar = Registrar::getInstance($this->slug);
- if ($registrar && $registrar->hasFeature('hide_single')) {
- $exclude = $this->excludeSingle();
- }
- if ($registrar && $registrar->hasFeature('is_timeline')) {
- $exclude = array_merge($exclude, $this->excludeTimeline());
- }
- return $exclude;
- }
- );
- if (!empty($exclude)) {
- add_filter('the_seo_framework_sitemap_exclude_ids', $exclude);
- }
- }
- protected function excludeSingle():array
- {
- return get_posts([
- 'post_type' => jvbCheckBase($this->slug),
- 'posts_per_page'=> -1,
- 'fields' => 'ids',
- 'post_status' => 'publish',
- ]);
- }
- protected function excludeTimeline():array
- {
- return get_posts([
- 'post_type' => jvbCheckBase($this->slug),
- 'posts_per_page'=> -1,
- 'fields' => 'ids',
- 'post_status' => 'publish',
- 'post_parent__not_in' => [0], // Only get posts with a parent
- ]);
- }
public function filterTSFSchema(array $graph, ?array $args):array
{
$based = jvbCheckBase($this->slug);
@@ -274,7 +236,7 @@
$class->setIsPartOf(get_home_url().'/#website');
$itemList = new render\Thing\Intangible\ItemList\ItemList();
$items = new WP_Query([
- 'post_type' => jvbCheckBase($this->slug),
+ 'post_type' => $registrar->getBased(),
'posts_per_page'=> 25,
'post_status' => 'publish',
'fields' => 'ids'
@@ -295,6 +257,7 @@
$class->setMainEntity($itemList);
$schema = $class->outputSchema();
+
if (JVB_TESTING) {
// error_log('Generated archive schema: '.print_r($schema, true));
}
@@ -313,6 +276,13 @@
$cached = $this->referenceCache->remember(
$ID,
function () use ($ID, $type) {
+
+ $postType = get_post_type($ID);
+ $function = BASE.'build_singular_'.jvbNoBase($postType).'_schema_reference';
+
+ if (function_exists($function)) {
+ return $function($ID);
+ }
switch ($type) {
case 'post':
$meta = Meta::forPost($ID);
@@ -329,7 +299,10 @@
}
$config = $this->getConfig();
$class = JVB()->schemaHelper()::classFromConfig($config, $meta);
- $class->delete('about');
+ if ($class) {
+ $class->delete('about');
+ }
+
switch ($type) {
case 'post':
@@ -473,6 +446,7 @@
'type' => 'JVBase\inc\managers\SEO\render\Thing\CreativeWork\Comment\Answer',
'text' => wp_strip_all_tags(str_replace("\n", '', $meta->get('post_content'))),
],
+ 'answerCount' => 1,
];
$question = SchemaHelper::classFromConfig($question);
$page->setMainEntity($question);
@@ -659,4 +633,20 @@
$page->setMainEntity($termset);
return $page->outputSchema();
}
+
+ public function extra():array
+ {
+ if (empty($this->extras)) {
+ return [];
+ }
+ $out = [];
+ foreach ($this->extras as $config) {
+ $schema = SchemaHelper::classFromConfig($config);
+ $output = $schema->outputSchema();
+ if (!empty($output)) {
+ $out[] = $output;
+ }
+ }
+ return $out;
+ }
}
--
Gitblit v1.10.0