renderedAssets = [];
}
protected function queryPosts(AcfCardData $acfCardData): array
{
// stub for tests
if (! class_exists('WP_Query')) {
return [];
}
$args = [
'fields' => 'ids',
'post_type' => $acfCardData->postTypes,
'post_status' => $acfCardData->postStatuses,
'posts_per_page' => $acfCardData->limit,
'order' => $acfCardData->order,
'orderby' => $acfCardData->orderBy,
];
if ($acfCardData->postIn) {
$args['post__in'] = $acfCardData->postIn;
}
if ($acfCardData->postNotIn) {
$args['post__not_in'] = $acfCardData->postNotIn;
}
if (in_array($acfCardData->orderBy, ['meta_value', 'meta_value_num',], true)) {
$args['meta_key'] = $acfCardData->orderByMetaField;
}
$query = new WP_Query($args);
// only ids, as the 'fields' argument is set
return $query->get_posts();
}
public function getMarkup(AcfCardData $acfCardData, int $pageId): string
{
$postIds = $this->queryPosts($acfCardData);
$markup = sprintf('
', $acfCardData->getSource());
foreach ($postIds as $postId) {
$shortcode = sprintf(
"[%s view-id='%s' object-id='%s']",
Plugin::SHORTCODE,
$acfCardData->acfViewId,
$postId
);
$markup .= do_shortcode($shortcode);
}
$markup .= '
';
// only once per page
$isEnqueuedAssetsOnPage = true;
if (! key_exists($pageId, $this->renderedAssets)) {
$this->renderedAssets[$pageId] = [];
}
if (! in_array($acfCardData->getSource(), $this->renderedAssets[$pageId])) {
$this->renderedAssets[$pageId][] = $acfCardData->getSource();
$isEnqueuedAssetsOnPage = false;
}
if (! $isEnqueuedAssetsOnPage) {
$cssCode = str_replace(["\t", "\n", "\r"], '', $acfCardData->cssCode);
$cssCode = trim($cssCode);
$jsCode = str_replace(["\t", "\n", "\r"], '', $acfCardData->jsCode);
$jsCode = trim($jsCode);
// no escaping, it's a CSS code, so e.g '.a > .b' shouldn't be escaped
$markup .= $cssCode ?
"" :
'';
$markup .= $jsCode ?
"" :
'';
}
return $markup;
}
}