Вопрос или проблема
У меня есть пользовательская страница на PHP, на которой мне нужно отображать детали поста WordPress на основе URL, введенного из админки. В админке при добавлении детали проекта мы вводим несколько URL постов статей, которые связаны с этим проектом, в текстовое поле. URL-адреса сохраняются в базе данных как значения, разделенные запятыми. С помощью explode я могу получить все URL, но не могу получить данные поста на основе URL.
<?php
$mark=explode(',', $rowPr['post_url']);//что здесь будет делать
foreach($mark as $out) {
$out;
}
?>
Поэтому я ищу пользовательский SQL-запрос вне WordPress для получения данных поста на основе URL поста. Мне потребуются заголовок поста, дата поста, автор поста и т. д.
Я согласен с комментарием WebElaine, что хранение идентификаторов было бы гораздо более надежным, так как URL могут легко изменяться.
Тем не менее, если у вас есть URL, например:
http://domain.com/2018/01/this-is-my-post/
Вы можете использовать что-то вроде этого, чтобы получить название поста:
$url="http://domain.com/2018/05/this-is-my-post/";
$components = parse_url($url);
preg_match('`^/\d*/\d*/(.*)/$`', $components['path'], $matches);
echo $matches[1];
Используя название поста в $matches[1]
, вы можете использовать get_page_by_path
, чтобы получить объект поста.
$post = get_page_by_path($matches[1]);
Оттуда вы можете получить любое значение по его ID, используя $post->ID
.
Ответ или решение
Для извлечения деталей записи WordPress на основе URL записи, важно понять, как перетаскивать данные из базы данных WordPress в условиях ограничений вашей среды и отсутствия возможности использовать стандартные WordPress функции напрямую. Вы выразили желание использовать SQL- запросы за пределами WordPress. Ниже приведены шаги и подходы, которые можно применить для решения этой задачи:
Анализ и Разбиение URL
Первоначально, используя функцию parse_url()
, выделите из URL нужные компоненты, такие как ‘path’, чтобы извлечь слаг (часть пути, идентифицирующая конкретный пост).
$url = "http://domain.com/2018/05/this-is-my-post/";
$components = parse_url($url);
preg_match('`^/\d*/\d*/(.*)/$`', $components['path'], $matches);
$post_slug = $matches[1];
SQL-запрос для Получения Деталей Записи
После извлечения слага записи (например, this-is-my-post
), создайте SQL-запрос для получения информации о записи из базы данных WordPress, используя стандартные таблицы, как wp_posts
.
SELECT ID, post_title, post_date, post_author
FROM wp_posts
WHERE post_name = 'this-is-my-post'
AND post_status = 'publish';
Важно: Обратите внимание на префикс таблицы wp_
, который может быть изменён, если на вашем сайте были применены меры безопасности.
Получение Информации об Авторе
Если вам необходимо также получить информацию об авторе, используйте следующий SQL-запрос для извлечения дополнительной информации из таблицы wp_users
.
SELECT user_login, display_name
FROM wp_users
WHERE ID = <post_author_id>;
Безопасность и Производительность
- Безопасность: Убедитесь, что осуществлены все меры по предотвращению SQL-инъекций, используя параметризованные запросы и функции обработки ввода.
- Производительность: Консолидация данных из нескольких SQL-запросов и их минимизация помогут оптимизировать производительность сайта.
Рекомендации
Подумайте о структурных изменениях: используйте идентификаторы записей, вместо URL в базе данных для повышения надежности. URL могут изменяться, что приведет к некорректным данным. Оптимизация базы данных проекта может значительно снизить временные затраты на поддержку и уменьшить вероятность ошибок.
Этот алгоритм позволит вам извлечь необходимые данные о постах, используя URL адреса, но при этом сохранит подходящее внимание к безопасности и производительности, что особенно важно в нестандартных условиях использования WordPress.