Но может быть есть более правильный способ?
Есть, но он зависит от того, как именно в плагине перехватывается ошибка 404.
Если используется действие parse_request
, то достаточно указать ярлык нужной записи в поле name
массива query_vars
.
Если какой-то другой вариант, то было бы здорово увидеть код.
Если используется действие parse_request, то достаточно указать ярлык нужной записи в поле name массива query_vars.
какой именно «Ярлык» ? post_name? post_id? guid? permalink?
Перепробовал все выше стоящие варианты — не пошло. выводит 404 ошибку
Код простой:
function func_404_redirect($query){
//global $wp_query;
//$old_url = $wp_query->query['pagename'];
$post = get_post(2);
//print get_permalink(2);
//print_r($post);
//print_r($query);
$query->query_vars['name'] = get_permalink($post);//$post->post_name;
//print get_permalink($post);
//print_r($query);
//die();
return $query;
//die();
/*$content = $post->post_content;
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
echo $content;*/
}
add_action('parse_request','func_404_redirect');
Вобщем у меня получилось вот таким способом:
function func_404_redirect($query){
global $wp_query;
$post = get_post(2);
$wp_query->queried_object = $post;
$wp_query->is_single = true;
$wp_query->is_404 = false;
$wp_query->queried_object_id = $post->ID;
$wp_query->post_count = 1;
$wp_query->current_post=-1;
$wp_query->posts = array($post);
}
add_filter('template_redirect','func_404_redirect');
Но на stackoverflow человек посоветовал делать через 404.php в самом шаблоне.
Какой из этих способов лучше пока незнаю
Я имел в виду такой вариант:
function func_404_redirect( $query ) {
$post = get_post( 123 );
$query->query_vars['name'] = $post->post_name;
}
add_action( 'parse_request', 'func_404_redirect' );
Вместо 123 нужно подставить ID существующей записи. Проверил на WP 4.4.2.