Вопрос или проблема
Пользователи моего сайта в основном делятся документами, вставляя ссылки в контент (страницы/сообщения) с помощью встроенного редактора. Эти файлы включают все — от PDF до документов Word. В настоящее время пользователи получают/копируют эти ссылки из файлового менеджера PHP, такого как FileRun. Моя цель состоит в том, чтобы пользователи вместо этого использовали путь с сопоставленного сетевого диска, например: \testdrive\Folder1\Folder2\test.txt. Следующая функция была написана для обработки замены файлов с сопоставленного сетевого диска на интернет-ссылку, такую как “http://page.test.org/files/“.
<?php
function test_test_url_parse($string)
{
// Вызывается test_test_url_parse_wrapper()
// Естеством preg_replace является то, что нужно отдельная функция
$bits=explode("\\",$string);
$bobs=array();
foreach ($bits as $bit)
{
$bobs[]=urlencode($bit);
}
return "\"http://page.test.org/files/".implode("https://wordpress.stackexchange.com/",$bobs)."\"";
}
function test_test_url_parse_wrapper($string)
{
//Находит/заменяет UCNs на URL в предоставленной строке.
$pattern1="~\"[a-z]{1}:\\\([^\"]+)\"~ie";
return preg_replace($pattern1, "test_test_url_parse('$1')", $string);
}
?>
Где можно было бы поместить такую функцию, чтобы она автоматически просматривала содержание страницы или сообщения и соответственно заменяла путь к файлам? Теоретически ли можно было бы поместить это просто в дочернюю тему? В настоящее время, когда я загружаю медиафайлы, такие как фотографии, они уже помещаются в путь “http://page.test.org/files/“. Я действительно ищу функцию, которая бы прошла через содержание сообщения/страницы и выполняла бы по сути постоянный “поиск и замену”.
Есть несколько похожих ответов в нижеуказанной ссылке:
Удаление любых и всех встроенных стилей из the_content()
где некоторые встроенные стили удаляются с помощью preg_replace и хуков WordPress (wp_insert_post_data & the_content).
Аналогичным образом, любая часть контента может быть изменена, как в случае (Удаление любых и всех встроенных стилей из the_content()).
Я знаю, что это старый вопрос, но он был поднят на главную страницу (по какой-то причине).
Я бы не делал это постоянно, так как это будет проверять всю страницу каждый раз при загрузке страницы, что будет много лишних операций, когда пользователи просто просматривают.
Я бы делал это на хуке save_post.
Таким образом:
function custom_check_URL( $post_ID, $post, $update ) {
if ( 'publish' === $post->post_status || 'page' === $post->post_type) {
// ЗДЕСЬ ПРОВЕРЯЙТЕ И ИЗМЕНЯЙТЕ ВАШИ URL.
}
}
add_action( 'save_post', 'custom_check_URL', 10, 3 );
Я не на 100% уверен, что вы проверяли или с чем заменяли, поэтому не включил это в ответ.
.
Ответ или решение
Автоматизация процесса поиска и замены ссылок в содержимом страниц и постов на вашем сайте — это задача, которая требует не только технических знаний, но и правильного подхода к их применению в контексте управления контентом. Рассмотрим основные шаги решения задачи на примере WordPress, используя PHP и соответствующие хуки платформы.
Теория
Основной задачей является автоматизация замены путей к файлам с mapped network drive на интернет-ссылки. Проблема современных сайтов часто заключается в необходимости интеграции локальных ресурсов с интернет-пространством, что позволяет пользователям более гибко работать со своим контентом и системами управления файлами. В вашем случае пользователи изначально используют файлы, размещаемые через файловые менеджеры, а цель — переориентировать их на использование веб-ссылок, что облегчит доступ и управление документами в интернете.
Наиболее логичным подходом к решению данной задачи в контексте WordPress будет использовать хук save_post
. Это позволит применить вашу функцию замены прямо в момент сохранения или обновления контента. Контент будет автоматически сканироваться на наличие определенных шаблонов путей, и соответствующая замена будет выполнена до его публицации. Такой подход уменьшает нагрузку на сайт по сравнению с постоянным анализом при каждом обращении к страницам.
Пример
Давайте разберём пример, предоставленный вами, и оптимизируем его под заданные условия. Ваша функция работает на основе preg_replace
и динамически формирует URL на основе части пути к файлу. Этот процесс можно улучшить использованием соответствующих хуков и более тщательно проработанных шаблонов регулярного выражения.
Ваш текущий подход включает использование функции preg_replace
с флагом ~ie
, который больше не поддерживается в современных версиях PHP. Вместо этого можно воспользоваться анонимными функциями или привязаться к более современному стандарту.
function test_test_url_parse($matches) {
$bits = explode("\\", $matches[1]);
$bobs = array();
foreach ($bits as $bit) {
$bobs[] = urlencode($bit);
}
return "\"http://page.test.org/files/" . implode("/", $bobs) . "\"";
}
function custom_check_URL($post_ID, $post, $update) {
if ('publish' === $post->post_status || 'page' === $post->post_type) {
$pattern = "~\"[a-z]{1}:\\\([^\"]+)\"~";
$post->post_content = preg_replace_callback($pattern, 'test_test_url_parse', $post->post_content);
// Обновляем пост после модификации
remove_action('save_post', 'custom_check_URL');
wp_update_post(array('ID' => $post_ID, 'post_content' => $post->post_content));
add_action('save_post', 'custom_check_URL', 10, 3);
}
}
add_action('save_post', 'custom_check_URL', 10, 3);
Применение
Теперь, когда мы реализовали оптимизированный подход, позвольте рассмотреть его практическое применение:
-
Эффективность и производительность: Современный WordPress-хук ‘save_post’ запускает вашу функцию только в момент сохранения или обновления поста. Это обстоятельство существенно снижает затраты ресурсов, так как процесс замены не выполняется при каждом просмотре страницы.
-
Надёжность: Использование безопасных методов PHP, таких как
preg_replace_callback
, позволяет избежать устаревших и небезопасных практик, которые могли бы привести к нарушению работы в будущих версиях PHP. -
Гибкость: Код легко адаптируется под другие нужды, например, расширение обработчиков других типов контента или использование альтернативных структур ссылок.
-
Быстрая адаптация: Внесение таких изменений часто требует изменений в логике обработки данных. Тем не менее, благодаря использованию представленных методик, вам не потребуется вносить изменения в пользовательский опыт, поскольку процесс будет происходить за кулисами.
-
Обновление и поддержка: Благодаря структуре WordPress, дальнейшее поддержание и модификация функции могут осуществляться с минимальными усилиями, что обеспечивает долговременную выгоду.
Подводя итог, скажем, что использование такой автоматизации процесса на веб-платформе, как WordPress, позволяет не только сократить ручные усилия по поддержке ссылок и путей к файлам, но также обеспечивать более гибкое и безопасное управление контентом.