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

12
A
На сайте с 17.04.2012
Offline
54
1252

Здравствуйте. Может кто подскажет как вывести похожие товары woocommerce в виде списка ссылок на 404 странице удаленного товара? которого нет в наличии. Похожие товары наверно должны как то подбираться по название ссылки, ссылка на кирилице названия товара. Или это делается как то иначе?

Мощные и дешевые VPS сервера (https://firstvds.ru/?from=489240)
G
На сайте с 23.11.2017
Offline
9
#1

Если нет решения в админке темы, то...

related.php отвечает в Woocommerce за вывод похожих продуктов (лежит в репозитории плагина). Открываешь шаблон 404 страницы своей темы, и вставляешь код из related.php в него. И будет тебе счастье.

A
На сайте с 17.04.2012
Offline
54
#2

Нашел такой вариант, но товары не выводит, выводит только статьи блога, может подскажете что подправить?

Создадим несколько вспомогательных функций. Их можно объявить в файле functions.php вашей темы или непосредственно в начале файла 404.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 и регулярное выражение. Предполагается, что сайт использует постоянные ссылки.

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.

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 частей: сообщение об ошибке, поиск, свежие записи, контактная информация и форма поиска.

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

<!-- 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>

Поиск похожих записей:

<!-- 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;?>

Свежие записи:

<!-- 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;?>

Контактные данные и форма для поиска:

<!-- 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();?>

A
На сайте с 17.04.2012
Offline
54
#3
Gogetsky:
Если нет решения в админке темы, то...
related.php отвечает в Woocommerce за вывод похожих продуктов (лежит в репозитории плагина). Открываешь шаблон 404 страницы своей темы, и вставляешь код из related.php в него. И будет тебе счастье.

Этот вариант не подходит, скорее всего потому, что похожие страницы подбираются по тайтлу, категории или меткам - как-то так. На 404-ой, есть только урл, по которому можно вести поиск похожих товаров.



Для наглядности кода дублирую предыдущий вопрос.

Нашел такой вариант, но товары не выводит, выводит только статьи блога, может подскажете что подправить?

Создадим несколько вспомогательных функций. Их можно объявить в файле functions.php вашей темы или непосредственно в начале файла 404.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 и регулярное выражение. Предполагается, что сайт использует постоянные ссылки.

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.

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 частей: сообщение об ошибке, поиск, свежие записи, контактная информация и форма поиска.

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

<!-- 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>

Поиск похожих записей:

<!-- 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;?>

Свежие записи:

<!-- 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;?>

Контактные данные и форма для поиска:

<!-- 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();?>
SV
На сайте с 03.11.2008
Offline
1395
#4

artatwjs, чтобы вывеси "похожие" - нужны критерии похожести. А ты ух удалил вместе с товаром.

Единственное что можно сделать в твоём случае - ориентироваться на слаг. Точнее правильно формировать и отталкиваться от него.

Напр. формировать с ключами и/или держать в базе соответствия критериев похожести.

Но ведь 404 может быть и совершенно по произвольным урлу. Что тогда? (вопрос риторический)

Поэтому (и не только поэтому) в нормальных ИМ товар не удалятся. Вообще.

Таким образом ты сам себе создал проблему на ровном месте и потом ищешь костыли её решения.

Делаю хорошие сайты хорошим людям. Предпочтение коммерческим направлениям. Топики помощи с ⓌordPress (https://searchengines.guru/ru/forum/1032910 ) и основы безопасности сайтов ( https://searchengines.guru/ru/forum/774117 ). *** Помощь\консультации в топиках форума - БЕСПЛАТНО. Платные услуги ( https://wp.me/P3YHjQ-3 ) - с бюджетом от 150$ ***
A
На сайте с 17.04.2012
Offline
54
#5
SeVlad:
artatwjs, чтобы вывеси "похожие" - нужны критерии похожести. А ты ух удалил вместе с товаром.
Единственное что можно сделать в твоём случае - ориентироваться на слаг. Точнее правильно формировать и отталкиваться от него.
Напр. формировать с ключами и/или держать в базе соответствия критериев похожести.
Но ведь 404 может быть и совершенно по произвольным урлу. Что тогда? (вопрос риторический)

Поэтому (и не только поэтому) в нормальных ИМ товар не удалятся. Вообще.

Таким образом ты сам себе создал проблему на ровном месте и потом ищешь костыли её решения.

Да, этот слаг и применяется в коде выше, надо только подкорректировать его под вывод товаров, а не записей блога. У меня, к сожалению нет навыков php. Поэтому и прошу подсказки. Я бы с удовольствием оставлял товары, которых нет в наличии, но не позволяет место на диске, так как товаров очень много, поэтому они пока удаляются.

SV
На сайте с 03.11.2008
Offline
1395
#6
artatwjs:
но не позволяет место на диске,

Вот это самый смешной аргумент, который только можно было придумать..

artatwjs:
надо только подкорректировать его под вывод товаров, а не записей блога.

Вникать в это лениво, но на вскидку вместо

'post_type' => 'post',

и

 'post_type' => 'any',

попробуй

'post_type' => 'product'

ЗЫ. для вставки кода в форум используй ббкод [code][/code] а не php.

A
На сайте с 17.04.2012
Offline
54
#7
SeVlad:
Вот это самый смешной аргумент, который только можно было придумать..
Вникать в это лениво, но на вскидку вместо
'post_type' => 'post',

и
 'post_type' => 'any',

попробуй
'post_type' => 'product'



ЗЫ. для вставки кода в форум используй ббкод [code][/code] а не php.

Пробовал, не работает.

Gerga
На сайте с 02.08.2015
Offline
89
#8

artatwjs, товар не обязательно удалять. Если товара нет в наличии, можно вывести соответствующее сообщение и предложить похожие варианты.

artatwjs:
Да, этот слаг и применяется в коде выше

Не применяется. Насколько я могу судить, функция frl_get_requested_slug() у вас ничего не возвращает.

artatwjs:
надо только подкорректировать его под вывод товаров, а не записей блога


<!-- Did you mean -->
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 5
);

$query = new WP_Query($args); //query posts by slug

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;?>


---------- Добавлено 25.11.2018 в 12:17 ----------

Для несуществующей страницы только другие несуществующие страницы могут быть related 🤪
A
На сайте с 17.04.2012
Offline
54
#9
Gerga:
artatwjs, товар не обязательно удалять. Если товара нет в наличии, можно вывести соответствующее сообщение и предложить похожие варианты.


Не применяется. Насколько я могу судить, функция frl_get_requested_slug() у вас ничего не возвращает.




<!-- Did you mean -->
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 5
);

$query = new WP_Query($args); //query posts by slug

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;?>


---------- Добавлено 25.11.2018 в 12:17 ----------

Для несуществующей страницы только другие несуществующие страницы могут быть related 🤪

Спасибо, работает. Но только он выдает последние опубликованные товары. Подправьте пожалуйста еще похожие товары.

Gerga
На сайте с 02.08.2015
Offline
89
#10
artatwjs:
Но только он выдает последние опубликованные товары.

Да, последние опубликованные товары.

Давайте называть вещи своими именами. 404 страница появляется когда по адресу ничего не найдено, т.е. страницы такой не существует. Соответственно, для несуществующей страницы, похожих записей вы не сможете получить т.к. их не существует.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий