Jeg har lavet website i WordPress for et spillested og har tidligere benyttet mig af pluginnet Advanced Custom Fields til at sætte dato for en koncert eller anden event. Det krævede, at jeg læste op på dokumentationen ift. WP_Query, så jeg kunne sikre mig, at jeg kun fik vist kommende events. Det har fungeret fint, men nu, hvor jeg er ved at lave en ny udgave af websitet har jeg tænkt, at det måtte være nemmere bare at sætte dato og tidspunkt for et kommende event som tidspunktet for udgivelsen af et post. Man kan diskutere om det er den bedste måde at løse problemet på, men jeg stødte på et andet problem på denne måde. Man kan sagtens få vist posts, der endnu ikke er udgivet. Min WP_Query-argumenter ser sådan her ud:
$args = [
'post_type' => 'event',
'post_status' => 'future',
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'ASC'
];
Problemet er, at indtil et post er udgivet (published) har det ikke et slug eller i hvertfald kan man ikke bruge pretty permalinks til ikke-udgivede posts. Her faldt jeg over følgende artikel:
Ved at bruge filtrene post_link og post_type_link kunne jeg nemt sørge for, at fremtidige posts også fik pretty permalinks. Her er koden fra mit eget projekt
// post, page post type
add_filter('post_link', 'future_permalink', 10, 3);
// custom post types
add_filter('post_type_link', 'future_permalink', 10, 4);
function future_permalink($permalink, $post, $leavename, $sample = false) {
/* for filter recursion (infinite loop) */
static $recursing = false;
if (empty($post->ID)) {
return $permalink;
}
if (!$recursing) {
if (isset($post->post_status) && ('future' === $post->post_status)) {
// set the post status to publish to get the 'publish' permalink
$post->post_status = 'publish';
$recursing = true;
return get_permalink($post, $leavename);
}
}
$recursing = false;
return $permalink;
}