PHP
<?php
// Exit if accessed directly
if (!defined('ABSPATH')) {
exit;
}
/**
* AJAX Handler - Random Post
* Wiederverwendbar für beliebige Post Types
*/
function gw_get_random_post() {
global $wpdb;
// POST TYPE HIER ANPASSEN
$post_type = 'post'; // z.B. 'post', 'portfolio', 'testimonial'
$post_id = $wpdb->get_var(
$wpdb->prepare(
"SELECT ID FROM {$wpdb->posts}
WHERE post_type = %s
AND post_status = %s
ORDER BY RAND()
LIMIT 1",
$post_type,
'publish'
)
);
if ($post_id) {
// FELDER HIER ANPASSEN
$data = array(
'id' => $post_id,
'title' => get_the_title($post_id),
'permalink' => get_permalink($post_id),
'excerpt' => get_the_excerpt($post_id),
'thumbnail' => get_the_post_thumbnail_url($post_id, 'medium'),
// ACF Felder falls nötig:
// 'custom_field' => get_field('field_name', $post_id),
);
wp_send_json_success($data);
}
wp_send_json_error('Kein Beitrag gefunden');
}
add_action('wp_ajax_gw_get_random_post', 'gw_get_random_post');
add_action('wp_ajax_nopriv_gw_get_random_post', 'gw_get_random_post');
/**
* Shortcode - Container
*/
function gw_random_post_shortcode() {
return '<div id="random-post-container">
<div class="spinner"></div>
</div>';
}
add_shortcode('random-post', 'gw_random_post_shortcode');
/**
* JavaScript im Footer
*/
function gw_random_post_script() {
$ajax_url = admin_url('admin-ajax.php');
?>
<script>
document.addEventListener("DOMContentLoaded", function () {
const container = document.getElementById('random-post-container');
if (!container) return;
const data = new FormData();
data.append('action', 'gw_get_random_post');
fetch('<?php echo esc_url($ajax_url); ?>', {
method: 'POST',
body: data
})
.then(res => res.json())
.then(result => {
if (result.success) {
container.innerHTML = buildPostHTML(result.data);
} else {
container.innerHTML = '<p>Fehler beim Laden.</p>';
}
})
.catch(error => {
container.innerHTML = '<p>Fehler beim Laden.</p>';
console.error('AJAX Error:', error);
});
function buildPostHTML(data) {
// HTML STRUKTUR HIER ANPASSEN
let html = '<div class="random-post-card">';
if (data.thumbnail) {
html += `<img src="${data.thumbnail}" alt="${data.title}">`;
}
html += `<h3><a href="${data.permalink}">${data.title}</a></h3>`;
if (data.excerpt) {
html += `<p>${data.excerpt}</p>`;
}
html += `<a href="${data.permalink}">Mehr lesen</a>`;
html += '</div>';
return html;
}
});
</script>
<?php
}
add_action('wp_footer', 'gw_random_post_script');