Nano Hash - криптовалюты, майнинг, программирование

wordpress — программная вставка сообщений с сохранением ссылок

В настоящее время я работаю над сценарием миграции для вставки статей из XML в Wordpress.

Пока я проанализировал XML и создал массивы в PHP, я перебираю эти массивы и вставляю их все один за другим в Wordpress со следующим кодом:

$post = array(
            'post_title'    => wp_strip_all_tags($article['title']),
            'post_content'  => $article['description'],
            'post_status'   => 'publish',
            'post_author'   => 1,
            'ping_status'   => 'closed',
            'post_date'     => $dateTime->format('Y-m-d H:i:s'),
            'post_type'     => $post_type
        );

        $result = wp_insert_post($post);

Все бы ничего, но вот проблема: XML — это экспорт с сайта (к сожалению, не знаю какой CMS), а в содержании могут быть ссылки на файлы на том же сайте, например:

<![CDATA[<p><strong>Shortcuts:</strong></p>
<p/>
<ul>
<li><a href="http://www.testsite.fi/julkaisut/5440/julkaisut?contentPath=fi/julkaisut/esitteet/elakkeen_hakeminen_ulkomailta">(Booklet in Finnish)</a> 
</li>
<li><a href="http://www.testsite.fi/julkaisut/5440/julkaisut?contentPath=fi/julkaisut/esitteet/sa_har_soker_du_pension_fran_utlandet">(Booklet in Swedish)</a> 
</li>
<li><a href="http://www.testsite.fi/julkaisut/5440/julkaisut?contentPath=fi/julkaisut/esitteet/pensioni_taotlemine_valismaalt">(Booklet in Estonian)</a> 
</li>
<li><a href="http://www.testsite.fi/julkaisut/5440/julkaisut?contentPath=fi/julkaisut/esitteet/poluchenie_pensii_iz_drugih_stran">(Booklet in Russian)</a> 
</li>
</ul>]]>

Testsite.fi — мой собственный сайт, так что это внутренние ссылки.

Эти ссылки относятся к PDF-файлам, и их следует вставить в WordPress, но очевидно, что ссылки будут другими. У меня есть PDF-файлы, на которые ссылаются (например: elakkeen_hakeminen_ulkomailta.pdf, и они находятся в той же папке, что и этот скрипт), поэтому все, что требуется, — это загрузить этот файл в Wordpress программно или вручную переместить его в нужное место. , а затем обновите ссылки, чтобы они по-прежнему работали.

Любая подсказка, как это сделать? Я что-то предполагаю с регулярными выражениями, но не могу понять.

07.08.2015

  • Вы можете скопировать файл в папку загрузки, они будут доступны. Просто Wordpress еще не знает о них, но вы контролируете местоположение. И, возможно, с некоторыми файлами API, кодекс должен предложить некоторые варианты. И вы не анализируете этот HTML-фрагмент с помощью регулярного выражения, а только с помощью DOMDocument. Позволяет также изменять ссылки. 07.08.2015
  • Спасибо, разобрался с загрузкой. Просто еще не уверен насчет DOMDocument, не совсем знаком с этим. 09.08.2015
  • Я думаю, что вот аналогичный пример того, как анализировать HTML и изменять URL-адреса: stackoverflow.com/a/24350166/367456 09.08.2015
  • URL-адреса в приведенном выше примере не имеют типа файла... это сделано намеренно? Кроме того, вы хотите изменить только ссылки на pdf-файлы или вы хотите изменить все внутренние ссылки? 10.08.2015
  • @alpipego: к сожалению, именно так мы получили ссылки, в данном случае я знаю, что это PDF-файлы. Да, мы хотели бы изменить все внутренние ссылки. 10.08.2015
  • @hakre: спасибо, я посмотрю на это! 10.08.2015

Ответы:


1

Чтобы изменить все внутренние ссылки, вы можете использовать это:

$content = preg_replace('%href="http://www\.testsite\.fi/(.*)"%', 'href="' get_bloginfo('wpurl') . '/$1"', $article['description'], -1);

$post = array(
    'post_title'    => wp_strip_all_tags($article['title']),
    'post_content'  => $content,
    'post_status'   => 'publish',
    'post_author'   => 1,
    'ping_status'   => 'closed',
    'post_date'     => $dateTime->format('Y-m-d H:i:s'),
    'post_type'     => $post_type
);

$result = wp_insert_post($post);

Поскольку PDF-файлы в вашем примере не имеют типа файла, их нельзя идентифицировать программно. В противном случае это было бы что-то вроде:

$upload_dir = wp_upload_dir();
$content = preg_replace('%href="http://www\.testsite\.fi/(.*)/(.*).pdf"%', 'href="' . $upload_dir['url'] . '/$2.pdf"', $article['description'], -1);

где $2 — имя файла PDF.

Примечание:

Часть href в регулярном выражении не является обязательной, но гарантирует, что вы не изменяете URL-адреса, которые не находятся внутри атрибута href. В зависимости от сценария вы можете пропустить эту часть.

10.08.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..