• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Как вывести похожие товары Woocommerce на 404 странице?

Marfius

Новичок
#1
Здравствуйте. Может кто подскажет как вывести похожие товары woocommerce в виде списка ссылок на 404 странице удаленного товара?-которого нет в наличии. Похожие товары должны подбираться по названию ссылки, ссылка на кирилице названия товара. Нашел решение в сети для записей блога, т.е похожие товары не выводятся на 404-ой, только записи блога. Может кто подскажет что подправить в коде? Меня интересует "поиск похожих товаров" и "свежие товары" вместо "записей". Код прилагаю (решение по 404-ой выкладываю полностью, может кому пригодится):

Создадим несколько вспомогательных функций. Их можно объявить в файле functions.php вашей темы или непосредственно в начале файла 404.php
PHP:
function frl_get_requested_slug(){
global $wp;
$q = $wp->request;
$q = preg_replace("/(.*)(html|htm|php|asp|aspx)$/","",$q);
$parts = explode('/', $q);
$q = end($parts);
return $q;
}
Функция frl_get_requested_slug возвращает содержание запрошенного URL, используя глобальную переменную $wp и регулярное выражение. Предполагается, что сайт использует постоянные ссылки.
PHP:
function frl_list_posts($posts){
if(empty($posts))
return '';
$list = array();
foreach($posts as $cpost) {
$title = apply_filters('the_title', $cpost->post_title);
$url = get_permalink($cpost);
$list[] = "<li><a href='{$url}'>{$title}</a></li>";
}
return implode('', $list);
}
Функция frl_list_posts помогает быстро вывести список ссылок на записи, в качестве аргумента — массив объектов WP_Post.

PHP:
function frl_load_error_style(){
if(!is_404())
return;
$src = get_template_directory_uri().'/css/error-style.css';
wp_enqueue_style('error-style', $src);
}


Функция frl_load_error_style загружает стили для шаблона 404 страницы, .css файл находится в подпапке /css директории вашей темы.


Код шаблона будет состоять из 4 частей: сообщение об ошибке, поиск, свежие записи, контактная информация и форма поиска.


Сообщение об ошибках:

PHP:
<!-- Message -->
<h2>404: Page not found</h2>
<div class="message not-found">
<p>Sorry, unfortunately, we could not find the requested page.</p>
<p>Let's find the information you need.</p>
</div>
Поиск похожих записей:
PHP:
<!-- Did you mean -->
<?php
$q = frl_get_requested_slug();
$args = array(
  'post_type' => 'any',
  'post_status' => 'publish',
  'name' => $q,
  'posts_per_page' => 5
);
$query = new WP_Query($args); //query posts by slug
if(empty($query->posts)){ //search for posts
  $q = str_replace('-', ' ', $q);
  $args = array(
    'post_type' => 'any',
    'post_status' => 'publish',
    's' => $q,
    'posts_per_page' => 5
  );
  $query->query($args);
}
if(!empty($query->posts)):
  ?>
  <h4>Were you looking for the one of the following pages?</h4>
  <ul class="posts-list">
  <?php echo frl_list_posts($query->posts);?>
  </ul>
<?php endif;?>
Свежие записи:
PHP:
<!-- Recent content -->
<?php
$args = array(
  'post_type' => 'post',
  'post_status' => 'publish',
  'posts_per_page' => 5
);
$query->query($args);
if(!empty($query->posts)):
  ?>
  <h4>Why not take a look through the most recent posts?</h4>
  <ul class="posts-list">
  <?php echo frl_list_posts($query->posts);?>
  </ul>
<?php endif;?>
Контактные данные и форма для поиска:
PHP:
<!-- Search options -->
<?php $home_link = home_url(); ?>
<h4>No good?</h4>
<p>Please use the search form to try again or start browsing from the <a href='<?php echo $home_link;?>'>Homepage</a>.</p>
<p>If you need further assistance please don't hesitate to contact at <em>info@domain.com</em>.</p>
<?php get_search_form();?>
 
Сверху Снизу