מפת אתר
// HTML Sitemap shortcode – יוצר מפת אתר לעמוד (לא XML, לא לגוגל)
add_action('init', function () {
add_shortcode('html_sitemap', function ($atts) {
$a = shortcode_atts([
'show_pages' => '1', // להציג עמודים
'pages_depth' => '3', // עומק היררכיה
'exclude' => ", // IDs להחרגה (12,34)
'show_posts' => '1', // להציג פוסטים
'by' => 'category', // category|post_tag
'show_cpt' => '1', // להציג CPT ציבוריים
'show_dates' => '0', // להציג תאריכים
'cache' => '1', // קאש
'ttl' => '900', // שניות קאש
'title_pages' => 'עמודים',
'title_posts' => 'פוסטים לפי קטגוריה',
'title_cpt' => 'תכנים נוספים',
], $atts, 'html_sitemap');
$key = 'html_sitemap_' . md5(maybe_serialize($a));
if ($a['cache'] === '1') {
$cached = get_transient($key);
if ($cached) return $cached;
}
ob_start();
echo '
// עמודים (היררכיה)
if ($a['show_pages'] === '1') {
echo '
' . esc_html($a['title_pages']) . '
- ';
- אין עמודים להצגה.
$pages = wp_list_pages([
'title_li' => ",
'echo' => 0,
'depth' => intval($a['pages_depth']),
'exclude' => $a['exclude'],
'post_status' => 'publish',
]);
echo $pages ?: '
';
echo '
';
}
// פוסטים לפי קטגוריה/תגיות
if ($a['show_posts'] === '1') {
$tax = ($a['by'] === 'post_tag') ? 'post_tag' : 'category';
$terms = get_terms(['taxonomy'=>$tax,'hide_empty'=>true]);
echo '
' . esc_html($a['title_posts']) . '
';
if (!is_wp_error($terms) && $terms) {
foreach ($terms as $term) {
echo '
' . esc_html($term->name) . '
- ';
- ' . esc_html(get_the_title($p)) . '';
if ($a['show_dates'] === '1') {
echo ' (' . esc_html(get_the_modified_date(get_option('date_format'), $p)) . ')';
}
echo ' - אין פריטים.
$posts = get_posts([
'post_type' => 'post',
'posts_per_page' => 100,
'tax_query' => [[ 'taxonomy'=>$tax, 'field'=>'term_id', 'terms'=>$term->term_id ]],
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
'exclude' => array_map('intval', array_filter(array_map('trim', explode(',', $a['exclude']))))
]);
if ($posts) {
foreach ($posts as $p) {
echo '
';
}
} else {
echo '
';
}
echo '
';
}
} else {
echo '
אין קטגוריות/תגיות להצגה.
';
}
echo '
';
}
// CPT ציבוריים (שאינם בילט-אין)
if ($a['show_cpt'] === '1') {
$pt_objects = get_post_types(['public'=>true, '_builtin'=>false], 'objects');
if (!empty($pt_objects)) {
echo '
' . esc_html($a['title_cpt']) . '
';
foreach ($pt_objects as $pt) {
echo '
' . esc_html($pt->labels->name) . '
- ';
- ' . esc_html(get_the_title($it)) . '';
if ($a['show_dates'] === '1') {
echo ' (' . esc_html(get_the_modified_date(get_option('date_format'), $it)) . ')';
}
echo ' - אין פריטים.
$items = get_posts([
'post_type' => $pt->name,
'post_status' => 'publish',
'posts_per_page' => 200,
'orderby' => 'title',
'order' => 'ASC',
'exclude' => array_map('intval', array_filter(array_map('trim', explode(',', $a['exclude']))))
]);
if ($items) {
foreach ($items as $it) {
echo '
';
}
} else {
echo '
';
}
echo '
';
}
echo '
';
}
}
echo '
';
// עיצוב בסיסי קטן
echo '
';
$html = ob_get_clean();
if ($a['cache'] === '1') set_transient($key, $html, intval($a['ttl']));
return $html;
});
});





