Я пытаюсь ajaxify wordpress чистым способом. Идея такова:Wordpress url to html
- Запрос Ajax выполняется от клиента к URL-адресу действия ajax (например,
/wp/wp-admin/admin-ajax.php?action=my_plugin_fetch_page&page=http://example.com/about
). - Ответ на этот запрос должен быть в формате JSON и содержать по адресу наименьшее название страницы и ее содержимое (что эквивалентно
http://example.com/about
).
Я не могу найти хороший способ получить содержание страницы, зная его URL.
Я пробовал использовать wp_remote_get
. Поэтому я просто делаю другой запрос от сервера к URL-адресу http://example.com/about
. Это работает, но это довольно медленно (замедление запроса около 2 секунд).
Я пробовал использовать url_to_postid
, который преобразует URL-адрес в post_id
. К сожалению, это не работает для архивных страниц и, вероятно, будет бесполезно в любом случае, так как мне нужен полный орган ответа от url http://example.com/about
, а не только идентификатор эквивалентной страницы.
Это, как он работает в настоящее время с wp_remote_get
:
function my_plugin_fetch_page() {
/*
*
* Getting url of target page from GET parameters
*
*/
$url = $_GET['page'];
$title = '';
$content = '';
/*
*
* Url must be set in request parameters and it must be internal link
*
*/
if ($url && my_plugin_is_internal_page($url)) {
/*
*
* Format relative urls to absolute urls.
*
* test/example -> http://example.com/test/example
*
*/
$url = nolife_single_format_url($url);
/*
*
* Make GET request.
*
*/
$page_response = wp_remote_get($url, array(
'user-agent' => 'InternalRequester'
));
if (! is_wp_error($page_response)) {
/*
*
* Response contains title and page content seperated by some
* seperator. By splitting response from that seperator, we
* get title and contents of page in seperate values.
*
*/
$content_parts = explode(MY_PLUGIN_SEPERATOR, wp_remote_retrieve_body($page_response));
// title comes first
$title = $content_parts[0];
// then content of page
$content = $content_parts[1];
}
}
wp_send_json(array(
'url' => $url,
'title' => $title,
'content' => $content
));
die;
}
Может кто-нибудь, пожалуйста, помогите мне с этим?
Не использовали, но ['get_page_by_path()'] (http://codex.wordpress.org/Function_Reference/get_page_by_path) более точно, чем 'url_to_postid'? Я предполагаю, что вы можете использовать что-то вроде [this] (http://wordpress.stackexchange.com/questions/9667/get-wordpress-post-content-by-post-id) после того, как у вас есть идентификатор. – Hobo
Спасибо, Хобо за ответ. Похоже, что 'get_page_by_path' не работает, например, с пользовательскими типами сообщений, потому что я не знаю, является ли страница настраиваемым типом сообщения или нет. Все, что я знаю, это URL страницы. :( –
Может быть, избыток, но можете ли вы предоставить массив всех возможных типов сообщений в качестве третьего аргумента? – Hobo