在处理页面之前解析 Jekyll 中 YAML 前端内容中的液体变量
Parse liquid variables in YAML front matter in Jekyll before processing the page
我正在使用 jekyll-postfiles 插件来让我的生活更轻松。这个插件允许我在我的博客 posts 的子文件夹中有静态内容。例如:
_posts/
├── 2018-10-10-a.md
└── 2018-10-11-b/
├── 2018-10-11-b.md
└── b.png
而且我可以在 Markdown 中将图像用作本地文件:![](b.png)
在 2018-10-11-b.md
中。这个插件使复制文件和使链接有效的所有魔法。
但现在我想使用 jekyll-seo-tag 并且我想像这样设置 YAML 变量:
---
image: "{{ page.url }}b.png"
---
这只是为了在 HTML 文件中创建自定义元数据,我没有在我的博客 post 中使用该变量。但我无法完成这项工作。 page.url
liquid 变量未展开,最终元数据如下所示:
<meta property="og:image" content="myBlog/%7B%7B%20page.url%20%7D%7D%2Fmap.png" />
而不是:
<meta property="og:image" content="myBlog/2018/10/11/b/b.png" />
此 属性 在 html 页面的 head
中。 Whosebug 中的一些问题展示了如何从 的前面获取变量 并解析文档正文中的液体标记。我需要的是在处理 markdown 文件之前解析液体标记。
是否可以让 YAML front matter 在处理文件之前解析 liquid 变量?
我不清楚为什么 front matter 应该包含一个变量。
在大多数情况下,您不需要在前面的内容中使用变量。我认为你的情况也是如此。我会将 front matter 变量移动到布局文件中。因此,布局文件应如下所示:
<meta property="og:image" content="myBlog/{{ page.url }}/{{ page.image }}" />
... 前面的内容应该是这样的:
---
image: "b.png"
---
我写的SEO without pluginSEO插件可以轻松交换。很容易根据您的需要进行调整。这是它添加到头部的代码:
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% if page.title %}{{ page.title }} | {% endif %}{{ site.title }}</title>
{% assign pagecontent_description = page.content | markdownify | replace: '.', '. ' | replace: '</h2>', ': ' | replace: '</h3>', ': ' | replace: '</h4>', ': ' | strip_html | strip_newlines | replace: ' ', ' ' | truncate: 160 %}
<meta name="description" content="{% if pagecontent_description.size > 10 %}{{ pagecontent_description }}{% else %}{{ site.description }}{% endif %}">
<link rel="shortcut icon" type="image/png" href="/img/icon-196x196.png">
<link rel="shortcut icon" sizes="196x196" href="/img/icon-196x196.png">
<link rel="apple-touch-icon" href="/img/icon-196x196.png">
<!-- Facebook and Twitter integration -->
<meta property="og:title" content="{{ page.title }}"/>
{% if page.image %}<meta property="og:image" content="{{ page.image }}"/>{% endif %}
<meta property="og:url" content="{{ site.url }}{{ page.url }}"/>
<meta property="og:type" content="article">
<meta property="og:image" content="{{ site.url }}{{ page.image }}"/>
<meta property="og:site_name" content="{{ site.title }}"/>
<meta property="og:description" content="{% if pagecontent_description.size > 10 %}{{ pagecontent_description }}{% else %}{{ site.description }}{% endif %}"/>
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@{{ site.twitter_url }}">
<meta name="twitter:title" content="{{ page.title }}" />
{% if page.image %}<meta name="twitter:image" content="{{ site.url }}{{ page.image }}" />{% endif %}
<meta name="twitter:url" content="{{ site.url }}{{ page.url }}" />
<meta name="twitter:description" content="{% if pagecontent_description.size > 10 %}{{ pagecontent_description }}{% else %}{{ site.description }}{% endif %}" />
<link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}">
<link rel="sitemap" type="application/xml" title="Sitemap" href="{{ "/sitemap.xml" | prepend: site.baseurl | prepend: site.url }}" />
如果您有任何问题,请告诉我。
我正在使用 jekyll-postfiles 插件来让我的生活更轻松。这个插件允许我在我的博客 posts 的子文件夹中有静态内容。例如:
_posts/
├── 2018-10-10-a.md
└── 2018-10-11-b/
├── 2018-10-11-b.md
└── b.png
而且我可以在 Markdown 中将图像用作本地文件:![](b.png)
在 2018-10-11-b.md
中。这个插件使复制文件和使链接有效的所有魔法。
但现在我想使用 jekyll-seo-tag 并且我想像这样设置 YAML 变量:
---
image: "{{ page.url }}b.png"
---
这只是为了在 HTML 文件中创建自定义元数据,我没有在我的博客 post 中使用该变量。但我无法完成这项工作。 page.url
liquid 变量未展开,最终元数据如下所示:
<meta property="og:image" content="myBlog/%7B%7B%20page.url%20%7D%7D%2Fmap.png" />
而不是:
<meta property="og:image" content="myBlog/2018/10/11/b/b.png" />
此 属性 在 html 页面的 head
中。 Whosebug 中的一些问题展示了如何从 的前面获取变量 并解析文档正文中的液体标记。我需要的是在处理 markdown 文件之前解析液体标记。
是否可以让 YAML front matter 在处理文件之前解析 liquid 变量?
我不清楚为什么 front matter 应该包含一个变量。
在大多数情况下,您不需要在前面的内容中使用变量。我认为你的情况也是如此。我会将 front matter 变量移动到布局文件中。因此,布局文件应如下所示:
<meta property="og:image" content="myBlog/{{ page.url }}/{{ page.image }}" />
... 前面的内容应该是这样的:
---
image: "b.png"
---
我写的SEO without pluginSEO插件可以轻松交换。很容易根据您的需要进行调整。这是它添加到头部的代码:
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% if page.title %}{{ page.title }} | {% endif %}{{ site.title }}</title>
{% assign pagecontent_description = page.content | markdownify | replace: '.', '. ' | replace: '</h2>', ': ' | replace: '</h3>', ': ' | replace: '</h4>', ': ' | strip_html | strip_newlines | replace: ' ', ' ' | truncate: 160 %}
<meta name="description" content="{% if pagecontent_description.size > 10 %}{{ pagecontent_description }}{% else %}{{ site.description }}{% endif %}">
<link rel="shortcut icon" type="image/png" href="/img/icon-196x196.png">
<link rel="shortcut icon" sizes="196x196" href="/img/icon-196x196.png">
<link rel="apple-touch-icon" href="/img/icon-196x196.png">
<!-- Facebook and Twitter integration -->
<meta property="og:title" content="{{ page.title }}"/>
{% if page.image %}<meta property="og:image" content="{{ page.image }}"/>{% endif %}
<meta property="og:url" content="{{ site.url }}{{ page.url }}"/>
<meta property="og:type" content="article">
<meta property="og:image" content="{{ site.url }}{{ page.image }}"/>
<meta property="og:site_name" content="{{ site.title }}"/>
<meta property="og:description" content="{% if pagecontent_description.size > 10 %}{{ pagecontent_description }}{% else %}{{ site.description }}{% endif %}"/>
<meta name="twitter:card" content="summary">
<meta name="twitter:site" content="@{{ site.twitter_url }}">
<meta name="twitter:title" content="{{ page.title }}" />
{% if page.image %}<meta name="twitter:image" content="{{ site.url }}{{ page.image }}" />{% endif %}
<meta name="twitter:url" content="{{ site.url }}{{ page.url }}" />
<meta name="twitter:description" content="{% if pagecontent_description.size > 10 %}{{ pagecontent_description }}{% else %}{{ site.description }}{% endif %}" />
<link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
<link rel="alternate" type="application/rss+xml" title="{{ site.title }}" href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}">
<link rel="sitemap" type="application/xml" title="Sitemap" href="{{ "/sitemap.xml" | prepend: site.baseurl | prepend: site.url }}" />
如果您有任何问题,请告诉我。