Добавить следующую случайную публикацию в шаблон страницы WordPress с помощью SQL
Вы можете часто получать советы по улучшению SEO (поисковая оптимизация), добавляя ссылки на свои предыдущие сообщения при публикации нового сообщения. Это помогает увеличить трафик и работает аналогично плагинам, таким как «Относительные сообщения», но только проще.
Все сообщения WordPress хранятся в таблице, например , wp_posts, и внутри этой таблицы вы найдете post_title, post_name, и эти столбцы довольно просты. В зависимости от конфигурации ваших URL-адресов сообщений, у вас может быть разный формат постоянных ссылок, которые можно настроить в разделе «Настройки» — «Постоянные ссылки».
Следующий код PHP может быть вставлен в ваш шаблон страницы, обычно это single.php, который является шаблоном отдельного сообщения, или page.php для шаблона страницы.
Соответственно измените wp_posts, так как это может немного отличаться. SQL-запрос возвращает случайный пост, из которого исключены страницы или элементы меню, ссылки и т. д. И статус поста должен быть опубликован, что исключает черновик. Ограничение 1 возвращает только 1 сообщение. Поэтому, если вам нужен предыдущий пост, вы можете изменить его на limit 2.
Постоянная ссылка на моем сайте основана на post_name, что более удобно для SEO. Вы вполне можете настроить это. SQL-запрос также можно настроить. Например, вы можете захотеть вернуть релевантные сообщения вместо случайных сообщений, сопоставив title
значение в соответствии с текущим заголовком сообщения. Или вы действительно хотите вернуть предыдущее или следующее сообщение, отсортированное по дате публикации, вы можете использовать поле «post_id».
Комментарии
Ю: «Круто, рандом действительно хорош. Также лучше убедиться, что случайное сообщение связано с текущим сообщением. Но это обычно не большая проблема, если блог относится к одному жанру.
Также порядок RAND() отлично работает для тысяч записей. (обычно для обычного блога). Но он сожжет вашу базу данных, если у вас есть миллионы записей в одной таблице, которые соответствуют критериям поиска».
Да, порядок SQL с помощью rand() немного сложен и медленный. Он должен получить все записи и отсортировать их случайным образом. Низкой эффективностью считается средний или большой размер таблицы. Вы можете использовать следующий трюк, чтобы получить случайную запись более быстрым способом, используя функцию rand() в PHP.
// get total number of records
$query = "select count(1) from `table`";
$result = mysql_query($query) or die(mysql_error());
$total = mysql_result($result, 0, 0);
// get a random
$r = rand(0, $total - 1);
// return a number between 0 and $total - 1 inclusive using PHP
$query = "select * from `table` limit $r, 1";
$result = mysql_query($query) or die(mysql_error());
Причина ограничения SQL указывает смещение, а второй параметр указывает количество записей для выборки.
Лучшая случайная запись
В соответствии с вышеизложенным порядок с помощью rand() крайне неэффективен, если у вас очень большая таблица, потому что для сортировки (даже если вам нужен только один элемент) будет вызываться функция rand(), а это то, что мы не делаем. хочу. Мы можем улучшить вышеизложенное, используя два запроса, первый из которых возвращает общее количество сообщений, и у нас есть случайная функция PHP, и мы получаем случайную запись с помощью оператора limit.