I have the below code in my single.php template. It retrieves a price from an external website, then, if it's different than the existing price custom field, it updates the meta value.
That part works as intended. What I'd like to do, though, is only check this and update it once a week rather than with each page load.
At first, I thought I could do it based on the post modified date, but apparently that doesn't change when updating post meta.
If I could somehow incorporate this into functions.php to update all posts weekly, that would be even better. But, it's fine if it only triggers on the post's load too. I'm sure there's a way to schedule a cron for it, but I'm unfamiliar with programming crons.
<!-- Check external price -->
<?php
if(get_field('xpath_price')) {
libxml_use_internal_errors(true);
$doc = new DomDocument();
$url = get_field('_scrape_original_url');
$doc->loadHTML(file_get_contents($url));
$xpath = new DOMXPath($doc);
$query = get_field('xpath_price');
$metas = $xpath->query($query);
foreach ($metas as $meta) {
$priceexternal1 = preg_replace("/(.*?)(\.)(.*)/", "$1", $meta->nodeValue);
$priceexternal = preg_replace("/[^0-9]/", "", $priceexternal1);
}
echo '<h3>External Price</h3>';
echo $priceexternal;
}
?>
<!-- Update post_meta if different -->
<?php
if ($priceexternal && ($priceexternal) <> (get_field('price'))) {
global $post;
update_post_meta( $post->ID, 'price', $priceexternal );
$priceout = $priceexternal;
} elseif(get_field('price')) {
$priceout = preg_replace("/[^0-9]/", "", get_field('price'));
}
?>