Wordpress的自动XML

ztigrdn8  于 2023-08-03  发布在  WordPress
关注(0)|答案(2)|浏览(106)

我在法国的一家小型电影院工作,我正在寻找一种管理WordPress网站的方法。
我希望我的网站连接到我的收银机软件,在那里我输入所有的放映时间为每部电影。我的软件可以导出这种类型的XML文件:https://cdsdemorc1.cineoffice.fr/TMSexport/cdsdemorc1
在XML文件中,每个条目对应于一个放映时间。然而,在我的网站上,我希望同一部电影的所有放映时间都出现在同一个页面上。
例如,使用像这样的xml:

<Shows>
  <Show>
    <AuditoriumNumber>1</AuditoriumNumber>
    <ShowStart>2023-07-30T18:45:00+0200</ShowStart>
    <ShowId>2387</ShowId>
    <FilmId>445</FilmId>
    <FilmTitle>Barbie</FilmTitle>
  </Show>

  <Show>
    <AuditoriumNumber>1</AuditoriumNumber>
    <ShowStart>2023-07-30T20:45:00+0200</ShowStart>
    <ShowId>2388</ShowId>
    <FilmId>445</FilmId>
    <FilmTitle>Barbie</FilmTitle>
  </Show>

  <Show>
    <AuditoriumNumber>2</AuditoriumNumber>
    <ShowStart>2023-07-30T14:45:00+0200</ShowStart>
    <ShowId>2389</ShowId>
    <FilmId>444</FilmId>
    <FilmTitle>Elementary</FilmTitle>
  </Show>

  <Show>
    <AuditoriumNumber>2</AuditoriumNumber>
    <ShowStart>2023-07-30T16:45:00+0200</ShowStart>
    <ShowId>2390</ShowId>
    <FilmId> 444</FilmId>
    <FilmTitle> Elementary</FilmTitle>
  </Show>
</Shows>

字符串
在芭比页面上,我想显示2个放映:

  • 2023-07-30T18:45:00+0200
  • 2023-07-30T20:45:00+0200

在Elementary页面上,我想显示2个筛选:

  • 2023-07-30T14:45:00+0200
  • 2023-07-30T16:45:00+0200

我希望它是自动的,因为每周的电影和放映都是不同的,每周都有很多放映。
我尝试与WP所有导入插件和ACF附加,但我没有成功.
如果有人有任何想法如何做到这一点,所以我可以尝试一下?
谢谢你的帮助!祝大家都好

zqry0prt

zqry0prt1#

你可以使用PowerShell。参见https://www.cdata.com/kb/tech/wordpress-ado-powershell.rst和下面的代码。您可以使用Sort-Object、Group-Object和Export-CSV。

using assembly System.Xml.Linq

$uri = 'https://cdsdemorc1.cineoffice.fr/TMSexport/cdsdemorc1'
$doc = [System.Xml.Linq.XDocument]::Load($uri)
$shows = $doc.Descendants("Show")

$table =  [System.Collections.ArrayList]@()

foreach($show in $shows)
{
   $auditoriumNumber = $show.Element('AuditoriumNumber').Value
   $showStart = $show.Element('ShowStart').Value
   $showEnd = $show.Element('ShowEnd').Value
   $showId = $show.Element('ShowId').Value
   $filmId = $show.Element('FilmId').Value
   $filmTitle = $show.Element('FilmTitle').Value

   $newRow = [psobject]@{
      'Auditorium Number'=$auditoriumNumber
      'Show Start'=$showStart
      'Show End'=$showEnd
      'Show Id'=$showId
      'Film Id'=$filmId
      'Film Title'=$filmTitle
   }
   $table.Add($newRow) | out-null
}
$table | Format-Table

字符串
上面的代码创建了一个哈希表。你可以把哈希表转换成一个HTML表,可以在wordpress中使用。见以下内容:https://arcanecode.com/2022/03/24/fun-with-powershell-extracting-blog-titles-and-links-from-a-wordpress-blog-with-powershell/

osh3o9ms

osh3o9ms2#

如果你能把所有重复的数据合并到一个帖子中,这样你就可以在每个帖子中找到所有的日期(每个电影都有一个帖子),这可能会更简单。但似乎 WP All Import 目前不支持此功能。我可以想象为什么这将是棘手的通用导入插件。
因此,您将不得不为此添加一些自定义代码。我可以想象你会创建一个showtimes自定义的帖子类型(但不要直接显示这些)。这样你就可以把所有的放映时间导入数据库了。
您还将有一个自定义的电影帖子类型,可以链接到多个showtimes帖子。所以我认为通过创建一个(PHP)函数(pmxi_after_xml_import),在导入完成后触发该函数,代码会做如下的事情:

  • 查询所有比当前日期早的显示时间并删除这些
  • 查询所有没有放映时间的电影(左)并删除或存档这些
  • 循环通过所有的showtimes和基于FilmId检查是否电影已经存在,如果是,然后只是添加showtimes post id到这部电影,如果不是,创建新的电影post和复制所有数据从showtime和链接它的id。

您可能需要一些自定义代码来显示电影帖子,这些帖子从链接的showtimes帖子中获取日期。
这样你也有旧的数据清理,也许你希望电影帖子不删除,但有一个存档的状态,所以它不会显示在一个“正在播放”-页面,但你仍然可以显示在你的网站上的其他地方(“电影不再播放”)搜索引擎优化的原因等。

相关问题