Автоматически искать и заменять ссылки в контенте (страницы/посты)?

Вопрос или проблема

Пользователи моего сайта в основном делятся документами, вставляя ссылки в контент (страницы/сообщения) с помощью встроенного редактора. Эти файлы включают все — от 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);

Применение

Теперь, когда мы реализовали оптимизированный подход, позвольте рассмотреть его практическое применение:

  1. Эффективность и производительность: Современный WordPress-хук ‘save_post’ запускает вашу функцию только в момент сохранения или обновления поста. Это обстоятельство существенно снижает затраты ресурсов, так как процесс замены не выполняется при каждом просмотре страницы.

  2. Надёжность: Использование безопасных методов PHP, таких как preg_replace_callback, позволяет избежать устаревших и небезопасных практик, которые могли бы привести к нарушению работы в будущих версиях PHP.

  3. Гибкость: Код легко адаптируется под другие нужды, например, расширение обработчиков других типов контента или использование альтернативных структур ссылок.

  4. Быстрая адаптация: Внесение таких изменений часто требует изменений в логике обработки данных. Тем не менее, благодаря использованию представленных методик, вам не потребуется вносить изменения в пользовательский опыт, поскольку процесс будет происходить за кулисами.

  5. Обновление и поддержка: Благодаря структуре WordPress, дальнейшее поддержание и модификация функции могут осуществляться с минимальными усилиями, что обеспечивает долговременную выгоду.

Подводя итог, скажем, что использование такой автоматизации процесса на веб-платформе, как WordPress, позволяет не только сократить ручные усилия по поддержке ссылок и путей к файлам, но также обеспечивать более гибкое и безопасное управление контентом.

Оцените материал
Добавить комментарий

Капча загружается...