Skip to content

Commit b3d0f29

Browse files
committed
Fix for WordPress Tag and Image
1 parent ee0aa05 commit b3d0f29

File tree

3 files changed

+103
-35
lines changed

3 files changed

+103
-35
lines changed

gatsby-wordpress-theme-libre/fix-source-nodes.js

Lines changed: 97 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
const { createRemoteFileNode } = require(`gatsby-source-filesystem`);
2+
const fetch = require("node-fetch");
3+
const FormData = require("form-data");
24
const currentTimeTag = new Date().getTime();
35
const createTag = {
46
wordpress_id: currentTimeTag,
@@ -122,28 +124,52 @@ const createImage = {
122124
path: "/wordpress-balsa/",
123125
};
124126

125-
module.exports = async function sourceNodes({
126-
actions,
127-
getNodesByType,
128-
getNodes,
129-
store,
130-
cache,
131-
createNodeId,
132-
createContentDigest,
133-
getCache,
134-
reporter,
135-
}) {
136-
const { createNode } = actions;
137-
138-
const wordPressTag = getNodesByType("wordpress__TAG");
139-
140-
const wordPressTagExists =
141-
wordPressTag &&
142-
wordPressTag.length > 0 &&
143-
wordPressTag[0].internal &&
144-
wordPressTag[0].internal.owner === "gatsby-source-wordpress";
145-
146-
if (!wordPressTagExists) {
127+
module.exports = async function sourceNodes(
128+
{
129+
actions,
130+
getNodesByType,
131+
getNodes,
132+
store,
133+
cache,
134+
createNodeId,
135+
createContentDigest,
136+
getCache,
137+
reporter,
138+
},
139+
{ wordpressConfig }
140+
) {
141+
const { createNode, deleteNode } = actions;
142+
143+
let url;
144+
145+
let accessToken;
146+
147+
let remoteWordPressTagCount;
148+
let remoteWordPressMediaCount;
149+
150+
if (wordpressConfig.hostingWPCOM) {
151+
url = `https://public-api.wordpress.com/wp/v2/sites/${wordpressConfig.baseUrl}`;
152+
accessToken = await getWPCOMAccessToken(wordpressConfig.auth);
153+
} else {
154+
url = `https://${wordpressConfig.baseUrl}/wp-json/wp/v2`;
155+
}
156+
157+
remoteWordPressMediaCount = await getWordPressEntityCount(
158+
`${url}/media`,
159+
accessToken
160+
);
161+
remoteWordPressTagCount = await getWordPressEntityCount(
162+
`${url}/tags`,
163+
accessToken
164+
);
165+
166+
const wordPressTags = getNodesByType("wordpress__TAG");
167+
168+
const originalTagSourceExists = wordPressTags.filter(
169+
(wordPressTag) => wordPressTag.internal.owner === "gatsby-source-wordpress"
170+
);
171+
172+
if (remoteWordPressTagCount == 0 || !originalTagSourceExists) {
147173
let node = {
148174
...createTag,
149175
children: [],
@@ -156,15 +182,14 @@ module.exports = async function sourceNodes({
156182
createNode(node);
157183
}
158184

159-
const wordpressMedia = getNodesByType("wordpress__wp_media");
185+
const wordpressMedias = getNodesByType("wordpress__wp_media");
160186

161-
const mediaExists =
162-
wordpressMedia &&
163-
wordpressMedia.length > 0 &&
164-
wordpressMedia[0].internal &&
165-
wordpressMedia[0].internal.owner === "gatsby-source-wordpress";
187+
const originalMediaSourceExists = wordpressMedias.filter(
188+
(wordpressMedia) =>
189+
wordpressMedia.internal.owner === "gatsby-source-wordpress"
190+
);
166191

167-
if (!mediaExists) {
192+
if (remoteWordPressMediaCount == 0 || !originalMediaSourceExists) {
168193
const encodedSourceUrl = encodeURI(createImage.source_url);
169194
const mediaDataCacheKey = `wordpress-media-placeholder`;
170195

@@ -212,3 +237,46 @@ module.exports = async function sourceNodes({
212237
}
213238
}
214239
};
240+
241+
async function getWPCOMAccessToken(_auth) {
242+
let result;
243+
const oauthUrl = `https://public-api.wordpress.com/oauth2/token`;
244+
245+
try {
246+
const form = new FormData();
247+
form.append("client_id", _auth.wpcom_app_clientId);
248+
form.append("client_secret", _auth.wpcom_app_clientSecret);
249+
form.append("username", _auth.wpcom_user);
250+
form.append("password", _auth.wpcom_pass);
251+
form.append("grant_type", `password`);
252+
253+
const response = await fetch(oauthUrl, { method: "POST", body: form });
254+
result = await response.json();
255+
result = result.access_token;
256+
} catch (e) {
257+
console.log(e);
258+
}
259+
260+
return result;
261+
}
262+
263+
async function getWordPressEntityCount(url, accessToken) {
264+
const getOptions = () => {
265+
let o = {
266+
method: `get`,
267+
};
268+
269+
if (accessToken) {
270+
o.headers = {
271+
Authorization: `Bearer ${accessToken}`,
272+
};
273+
}
274+
275+
return o;
276+
};
277+
const options = getOptions();
278+
const response = await fetch(url, options);
279+
const data = await response.json();
280+
281+
return data.length;
282+
}

gatsby-wordpress-theme-libre/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@draftbox-co/gatsby-wordpress-theme-libre",
3-
"version": "1.0.38",
3+
"version": "1.0.39",
44
"license": "MIT",
55
"resolutions": {
66
"sharp": "0.23.4"

yarn.lock

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1738,6 +1738,11 @@
17381738
resolved "https://registry.yarnpkg.com/@types/debug/-/debug-0.0.30.tgz#dc1e40f7af3b9c815013a7860e6252f6352a84df"
17391739
integrity sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ==
17401740

1741+
"@types/eslint-visitor-keys@^1.0.0":
1742+
version "1.0.0"
1743+
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
1744+
integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==
1745+
17411746
"@types/events@*":
17421747
version "3.0.0"
17431748
resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7"
@@ -1913,11 +1918,6 @@
19131918
version "2.30.0"
19141919
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.30.0.tgz#7681c305a6f4341ae2579f5e3a75846c29eee9ce"
19151920
integrity sha512-9kDOxzp0K85UnpmPJqUzdWaCNorYYgk1yZmf4IKzpeTlSAclnFsrLjfwD9mQExctLoLoGAUXq1co+fbr+3HeFw==
1916-
dependencies:
1917-
"@types/eslint-visitor-keys" "^1.0.0"
1918-
"@typescript-eslint/experimental-utils" "2.30.0"
1919-
"@typescript-eslint/typescript-estree" "2.30.0"
1920-
eslint-visitor-keys "^1.1.0"
19211921

19221922
"@typescript-eslint/typescript-estree@2.30.0":
19231923
version "2.30.0"

0 commit comments

Comments
 (0)