Добавить следующую случайную публикацию в шаблон страницы WordPress с помощью SQL
Вы можете часто получать советы по улучшению SEO (поисковая оптимизация), добавляя ссылки на свои предыдущие сообщения при публикации нового сообщения. Это помогает увеличить трафик и работает аналогично плагинам, таким как «Относительные сообщения», но только проще.
Все сообщения WordPress хранятся в таблице, например , wp_posts, и внутри этой таблицы вы найдете post_title, post_name, и эти столбцы довольно просты. В зависимости от конфигурации ваших URL-адресов сообщений, у вас может быть разный формат постоянных ссылок, которые можно настроить в разделе «Настройки» — «Постоянные ссылки».
Следующий код PHP может быть вставлен в ваш шаблон страницы, обычно это single.php, который является шаблоном отдельного сообщения, или page.php для шаблона страницы.
global $wpdb; // include the $wpdb
$query = "select `post_title` as `title`, `post_name` as `name` from `wp_posts` where `post_type`='post' and `post_status`='publish' order by rand() limit 1";
$results = $wpdb->get_results($query); // run the query on the database
if ($results) {
$domain = $_SERVER['SERVER_NAME'];
foreach ($results as $toppost) {
echo "<a href="<a class="vglnk" target="_blank" href="http://$domain/".$toppost-" rel="nofollow"><span>http</span><span>://$</span><span>domain</span><span>/".$</span><span>toppost</span><span>-</span></a>>name."/"><img title="Next Post: ".$toppost->title."" src="<a class="vglnk" target="_blank" href="https://helloacm.com/static/nextpost2.png" rel="nofollow"><span>https</span><span>://</span><span>helloacm</span><span>.</span><span>com</span><span>/</span><span>static</span><span>/</span><span>nextpost2</span><span>.</span><span>png</span></a>" alt="Next Post: ".$toppost->title."" /></a>";
}
}
Соответственно измените 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.
global $wpdb; // include the $wpdb
$query= "select count(1) from `wp_posts` where `post_type`='post' and `post_status`='publish'";
$cnt = $wpdb->get_var($query); // run the query on the database and return single variable
$rand = mt_rand(0, $cnt - 1);
$query= "select `post_title` as `title`, `post_name` as `name` from `wp_posts` where `post_type`='post' and `post_status`='publish' limit $rand,1";
$results = $wpdb->get_results($query); // run the query on the database
// the rest are the same