Den 19–22 augusti hittar du oss på StjärnaFyrkant på Elmia Lastbil – en av årets stora mötesplatser för transport- och åkeribranschen!Monter B01:63Kom förbi och träffa oss, snacka lösningar och upptäck hur vi kan hjälpa dig att få en smartare, tryggare och mer uppkopplad vardag. Vi ser fram emot att träffa dig på Elmia!Hitta oss direkt i mässkartan: Monter B01:63#stärnafyrkant #elmialastbil #elmialastbil2026 #transport #åkeri #Lastbil #Uppkopplad #Digitalisering #mässa
VW Tayron Räddningstjänsten
Öppettider i sommar! Mån-Tors 07:30 - 16:00Fre 07:30 - 12:00
Ledingsfordon Räddningstjänsten
Foton från Standby Swedens inlägg
option_name,
[
'sanitize_callback' => [$this, 'sanitize_settings']
]
);
}
public function sanitize_settings($input) {
return [
'page_id' => sanitize_text_field($input['page_id'] ?? ''),
'access_token' => sanitize_text_field($input['access_token'] ?? ''),
];
}
/**
* Adminsida
*/
public function settings_page() {
$settings = get_option($this->option_name, []);
?>
admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('ct_facebook_feed_nonce')
]
);
$js = "
document.addEventListener('DOMContentLoaded', function() {
const button = document.querySelector('.ct-facebook-load-more');
if (!button) {
return;
}
button.addEventListener('click', function() {
const feed = document.querySelector('.ct-facebook-feed');
const postsContainer = document.querySelector('.ct-facebook-posts');
const loading = document.querySelector('.ct-facebook-loading');
const after = button.dataset.after || '';
button.style.display = 'none';
loading.style.display = 'block';
const formData = new FormData();
formData.append('action', 'ct_load_facebook_posts');
formData.append('nonce', CTFacebookFeed.nonce);
formData.append('after', after);
fetch(CTFacebookFeed.ajaxUrl, {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
loading.style.display = 'none';
if (!data.success) {
button.style.display = 'block';
alert(data.data.message || 'Kunde inte hämta fler inlägg.');
return;
}
postsContainer.insertAdjacentHTML(
'beforeend',
data.data.html
);
if (data.data.next) {
button.dataset.after = data.data.next;
button.style.display = 'block';
} else {
button.remove();
}
})
.catch(error => {
loading.style.display = 'none';
button.style.display = 'block';
console.error(error);
alert('Ett fel uppstod när fler inlägg skulle hämtas.');
});
});
});
";
wp_add_inline_script('ct-facebook-feed', $js);
}
/**
* Shortcode
*/
public function shortcode() {
$settings = get_option($this->option_name, []);
if (empty($settings['page_id']) || empty($settings['access_token'])) {
return '
get_posts($after, 10);
if (is_wp_error($result)) {
wp_send_json_error([
'message' => $result->get_error_message()
]);
}
$next = '';
if (!empty($result['paging']['next'])) {
$next = $this->get_after_cursor(
$result['paging']['next']
);
}
wp_send_json_success([
'html' => $this->render_posts($result['data']),
'next' => $next
]);
}
/**
* Hämta Facebook-inlägg
*/
private function get_posts($after = '', $limit = 10) {
$settings = get_option($this->option_name, []);
$page_id = $settings['page_id'] ?? '';
$token = $settings['access_token'] ?? '';
if (!$page_id || !$token) {
return new WP_Error(
'missing_config',
'Facebook-flödet är inte konfigurerat.'
);
}
$api_version = 'v24.0';
$url = 'https://graph.facebook.com/' .
$api_version .
'/' .
rawurlencode($page_id) .
'/posts';
$params = [
'fields' => 'id,message,created_time,full_picture,permalink_url',
'limit' => $limit,
'access_token' => $token,
];
if (!empty($after)) {
$params['after'] = $after;
}
$url = add_query_arg($params, $url);
$response = wp_remote_get(
$url,
[
'timeout' => 20
]
);
if (is_wp_error($response)) {
return $response;
}
$status = wp_remote_retrieve_response_code($response);
$body = json_decode(
wp_remote_retrieve_body($response),
true
);
if ($status < 200 || $status >= 300) {
$message = $body['error']['message']
?? 'Facebook API returnerade ett fel.';
return new WP_Error(
'facebook_api_error',
$message
);
}
return $body;
}
/**
* Rendera inlägg
*/
private function render_posts($posts) {
if (empty($posts)) {
return '
CT Facebook Feed
Användning
Lägg följande shortcode på valfri sida eller i ett block:
[ct_facebook_feed]
Facebook-flödet är inte konfigurerat ännu.
'; } $result = $this->get_posts('', 10); if (is_wp_error($result)) { return '' . esc_html($result->get_error_message()) . '
'; } ob_start(); ?>
render_posts($result['data']); ?>
Laddar fler inlägg...
Inga inlägg hittades.
'; } ob_start(); foreach ($posts as $post) : $message = $post['message'] ?? ''; $date = $post['created_time'] ?? ''; $image = $post['full_picture'] ?? ''; $link = $post['permalink_url'] ?? ''; ?>© 2022 Disigned by Lizard AB