• Здравствуйте уважаемые знатоки.
    У меня следующий вопрос
    Есть у меня плагин WordPress в котором я перехватываю 404 ошибку и получаю на основе ее адреса URL-ку старого поста. Потом я делаю преобразования и получаю объект WP_Post с нужным постом для отображения
    Теперь вопрос как я могу сразу же отобразить этот пост в таком виде какой он должен быть.
    без wp_redirect или других переадресаций.
    Самый простой вариант который я придумал — делать echo wp_remote_fopen(….<адрес поста permalink>…)
    Но может быть есть более правильный способ?
    Спасибо.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Но может быть есть более правильный способ?

    Есть, но он зависит от того, как именно в плагине перехватывается ошибка 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 в самом шаблоне.
    Какой из этих способов лучше пока незнаю

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Я имел в виду такой вариант:

    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.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Как отобразить страницу поста в WordPress?» закрыта для новых ответов.