Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions packages/gatsby-source-wordpress/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@ plugins: [
// Set verboseOutput to true to display a verbose output on `npm run develop` or `npm run build`
// It can help you debug specific API Endpoints problems
verboseOutput: false,
// Search and Replace Urls across WordPress content
searchReplace: {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's make this option searchAndReplaceURLs — no reason not to be explicit :-)

sourceUrl: "https://source-url.com",
replacementUrl: "https://replacement-url.com"
}
},
},
];
Expand Down
7 changes: 7 additions & 0 deletions packages/gatsby-source-wordpress/src/gatsby-node.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ exports.sourceNodes = async (
auth = {},
verboseOutput,
perPage = 100,
searchReplace = [],
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be {}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops! missed this 👎

}
) => {
const { createNode } = boundActionCreators
Expand Down Expand Up @@ -92,6 +93,12 @@ exports.sourceNodes = async (
createNode,
})

// Search and replace Content Urls
entities = normalize.searchReplaceContentUrls({
entities,
searchReplace,
})

// creates nodes for each entry
normalize.createNodesFromEntities({ entities, createNode })

Expand Down
55 changes: 55 additions & 0 deletions packages/gatsby-source-wordpress/src/normalize.js
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,61 @@ exports.mapTagsCategoriesToTaxonomies = entities =>
return e
})

exports.searchReplaceContentUrls = function ({ entities, searchReplace }) {

if (
!(_.isPlainObject(searchReplace)) ||
!(_.has(searchReplace, `sourceUrl`)) ||
!(_.has(searchReplace, `replacementUrl`)) ||
typeof searchReplace.sourceUrl !== `string` ||
typeof searchReplace.replacementUrl !== `string`
) {
console.log(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't log if person didn't use this option.

colorized.out(
`Invalid Search and Replace option`,
colorized.color.Font.FgRed
)
)
return entities
}

const { sourceUrl, replacementUrl } = searchReplace

const _blacklist = [
`_links`,
`__type`,
]

const blacklistProperties = function (obj = {}, blacklist = []) {
for (var i = 0; i < blacklist.length; i++) {
delete obj[blacklist[i]]
}

return obj
}

return entities.map(function (entity) {
const original = Object.assign({}, entity)

try {
var whiteList = blacklistProperties(entity, _blacklist)
var replaceable = JSON.stringify(whiteList)
var replaced = replaceable.replace(new RegExp(sourceUrl, `g`), replacementUrl)
var parsed = JSON.parse(replaced)
} catch (e) {
console.log(
colorized.out(
e.message,
colorized.color.Font.FgRed
)
)
return original
}

return _.defaultsDeep(parsed, original)
})
}

exports.mapEntitiesToMedia = entities => {
const media = entities.filter(e => e.__type === `wordpress__wp_media`)

Expand Down