_ogłoszenia local

array(
'name’ => 'Kategorie Ogłoszeń’,
'singular_name’ => 'Kategoria Ogłoszenia’,
'add_new_item’ => 'Dodaj nową kategorię’,
'edit_item’ => 'Edytuj kategorię’
),
'hierarchical’ => true,
'show_ui’ => true,
'show_admin_column’ => true,
'query_var’ => true,
'rewrite’ => array(’slug’ => 'kategoria-ogloszenia’),
));

// Rejestracja Ogłoszeń (Możliwość edycji/usuwania z poziomu WP)
register_post_type(’ogloszenie’, array(
'labels’ => array(
'name’ => 'Ogłoszenia’,
'singular_name’ => 'Ogłoszenie’,
'add_new_item’ => 'Dodaj nowe ogłoszenie’,
'edit_item’ => 'Edytuj Ogłoszenie’
),
'public’ => false,
'show_ui’ => true,
'capability_type’ => 'post’,
'has_archive’ => false,
'supports’ => array(’title’, 'editor’), // Tytuł użyjemy jako Kontakt, Editor jako Opis
));
}
add_action(’init’, 'pol_register_post_type_and_taxonomy’);

// 2. AUTOMATYCZNE GENEROWANIE STARTOWYCH KATEGORII PRZY AKTYWACJI
function pol_plugin_activate() {
pol_register_post_type_and_taxonomy();

$startowe_kategorie = array(
„AGD RTV Komputery Telefony – kupię / sprzedam”,
„Garaż – kupię / sprzedam / wynajmę”,
„Mieszkania – kupię / sprzedam / zamienię”,
„Mieszkania – mam / poszukuję do wynajęcia”,
„Motoryzacja – kupię / sprzedam / zamienię”,
„Nieruchomości – kupię / sprzedam / wynajmę”,
„Oddam / Wezmę – za darmo”,
„Sprzedam / Kupię – wszystko”,
„Towarzyskie”,
„Usługi (ogłoszenia płatne)”,
„Wynajmę apartament dla wczasowiczów”,
„Zaproszenie – kawa / herbata / spacer / gra”,
„Zatrudnienie (Firmy – płatne) (Os. fizyczne – darmowe)”,
„Zgubione / Znalezione / Ukradziono”,
„Zwierzęta”
);

foreach ($startowe_kategorie as $kat) {
if (!term_exists($kat, 'ogloszenia_kat’)) {
wp_insert_term($kat, 'ogloszenia_kat’);
}
}
}
register_activation_hook(__FILE__, 'pol_plugin_activate’);

// 3. OBSŁUGA POLA DODATKOWEGO (ZDJĘCIE) W PANELU ADMINISTRACYJNYM WP
function pol_add_custom_meta_boxes() {
add_meta_box(’pol_foto_meta’, 'Zdjęcie ogłoszenia (Miniatura)’, 'pol_render_foto_meta_box’, 'ogloszenie’, 'side’, 'default’);
}
add_action(’add_meta_boxes’, 'pol_add_custom_meta_boxes’);

function pol_render_foto_meta_box($post) {
$foto_url = get_post_meta($post->ID, '_pol_foto_base64′, true);
if ($foto_url) {
echo ’’;
} else {
echo ’

Brak zdjęcia dla tego ogłoszenia.

’;
}
echo ’

Zdjęcia przesyłane są przez użytkowników jako tekst Base64 bez generowania linków zewnętrznych.

’;
}

// 4. OBSŁUGA FORMULARZA PRZEZ UŻYTKOWNIKA (FRONTEND)
function pol_handle_front_form_submission() {
if (isset($_POST[’pol_submit_ogloszenie’]) && wp_verify_nonce($_POST[’pol_nonce_field’], 'pol_add_ogloszenie_action’)) {

$kontakt = sanitize_text_field($_POST[’pol_kontakt’]);
$opis = sanitize_textarea_field($_POST[’pol_opis’]);
$kategoria_id = intval($_POST[’pol_kategoria’]);

// Domyślny placeholder obrazka (Base64)
$foto_base64 = „data:image/svg+xml;utf8,BRAK„;

// Przetwarzanie zdjęcia (Walidacja rozmiaru do 1MB)
if (!empty($_FILES[’pol_foto’][’tmp_name’])) {
$file_size = $_FILES[’pol_foto’][’size’];

if ($file_size <= 1048576) { // 1 MB w bajtach $file_type = $_FILES['pol_foto']['type']; $file_data = file_get_contents($_FILES['pol_foto']['tmp_name']); $foto_base64 = 'data:' . $file_type . ';base64,' . base64_encode($file_data); } else { wp_redirect(add_query_arg('ogloszenie_error', 'za-duzy-plik', wp_get_referer())); exit; } } // Tworzenie nowego wpisu ogłoszenia w bazie WP $nowe_ogloszenie = array( 'post_title' => $kontakt, // Zapisujemy kontakt jako tytuł do łatwej edycji w adminie
'post_content’ => $opis,
'post_status’ => 'publish’,
'post_type’ => 'ogloszenie’
);

$post_id = wp_insert_post($nowe_ogloszenie);

if ($post_id) {
// Przypisanie wybranej kategorii
wp_set_object_terms($post_id, array($kategoria_id), 'ogloszenia_kat’);
// Zapisanie zdjęcia w schowanym polu meta
update_post_meta($post_id, '_pol_foto_base64′, $foto_base64);

wp_redirect(add_query_arg(’ogloszenie_success’, '1′, wp_get_referer()));
exit;
}
}
}
add_action(’admin_post_nopriv_pol_add_ogloszenie’, 'pol_handle_front_form_submission’);
add_action(’admin_post_pol_add_ogloszenie’, 'pol_handle_front_form_submission’);

// 5. WYŚWIETLANIE MODUŁU (SHORTCODE: [proste_ogloszenia])
function pol_render_ogloszenia_shortcode() {
ob_start();

// Pobranie aktualnego filtra z URL (?kat_filter=ID)
$aktualny_filtr = isset($_GET[’kat_filter’]) ? intval($_GET[’kat_filter’]) : 0;

// Komunikaty nad formularzem
if (isset($_GET[’ogloszenie_success’])) {
echo ’

Ogłoszenie zostało pomyślnie dodane!

’;
}
if (isset($_GET[’ogloszenie_error’]) && $_GET[’ogloszenie_error’] == 'za-duzy-plik’) {
echo ’

Błąd: Plik zdjęcia przekracza dopuszczalny rozmiar 1 MB!

’;
}

// Pobieramy zaktualizowaną listę kategorii z WP w celu wyliczenia liczników
$kategorie = get_terms(array(’taxonomy’ => 'ogloszenia_kat’, 'hide_empty’ => false));
$wszystkie_count = wp_count_posts(’ogloszenie’)->publish;
?>

Dodaj ogłoszenie






Filtruj według kategorii:

  • „>
    [ Pokaż wszystkie ogłoszenia ] ()
  • term_id) ? 'class=”active”’ : ”;
    // Liczba ogłoszeń w danej kategorii
    $ile_wpisow = $kat->count;
    $url = add_query_arg(’kat_filter’, $kat->term_id, remove_query_arg(’ogloszenie_success’));
    echo ’

  • ’ . esc_html($kat->name) . ’ (’ . $ile_wpisow . ’)
  • ’;
    }
    ?>

0) {
$filtr_term = get_term($aktualny_filtr, 'ogloszenia_kat’);
echo 'Ogłoszenia w kategorii: ’ . esc_html($filtr_term->name);
} else {
echo 'Wszystkie aktualne ogłoszenia’;
}
?>
'ogloszenie’,
'post_status’ => 'publish’,
'posts_per_page’ => -1, // Pokaż wszystkie
'orderby’ => 'date’,
'order’ => 'DESC’ // Najnowsze na górze
);

if ($aktualny_filtr > 0) {
$args[’tax_query’] = array(
array(
'taxonomy’ => 'ogloszenia_kat’,
'field’ => 'term_id’,
'terms’ => $aktualny_filtr,
),
);
}

$query = new WP_Query($args);

if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
$pid = get_the_ID();
$data_wytworzenia = get_the_date(’d.m.Y, H:i’, $pid);
$foto = get_post_meta($pid, '_pol_foto_base64′, true);
$lista_kat = wp_get_post_terms($pid, 'ogloszenia_kat’);
$kat_nazwa = (!empty($lista_kat) && !is_wp_error($lista_kat)) ? $lista_kat[0]->name : ”;

?>

Kontakt:

Brak ogłoszeń w tej sekcji.

’;
}
?>