自动更新自定义帖子类型的所有帖子中的自定义字段

时间:2018-05-13 作者:Jose

我有一个自定义的帖子类型(“fecha”),其中包含过去的事件(名人的生日、历史日期等)。在这些帖子中,一个自定义字段(“aniversario”)计算自原始日期起已经过去了多少年。

该值在创建和保存帖子时存储,因此我需要每年更新这些自定义帖子(全部),以便该自定义字段保持有效。我尝试使用cron(带有每日时间表)调用update\\u post\\u meta,但没有成功。这些自定义帖子类型中的所有帖子都是私有的,只显示在管理端。

该网站是针对非商业人士的个人网站(我是一名自由撰稿人,这是一次建立个人编辑日历的尝试,这对我有很大帮助)
如果有任何帮助可以指出代码中的错误或缺少的内容,那就太好了。代码如下(位于my functions.php中):

function run_update_fecha_cron_job() {

    $posts = get_posts([
        \'post_type\' => \'fecha\',
        \'post_status\' => \'any\',
        \'posts_per_page\' => -1, // getting all posts of a post type
        \'no_found_rows\' => true, // speeds up a query significantly and can be set to \'true\' if we don\'t use pagination
        \'fields\' => \'ids\' // again, for performance
    ]);

    // now check meta and update custom fields for every post
    foreach ($posts as $post_id) {

        /*
         * calculate how many years have passed by sustracting the value from
         * another custom field called "wpcf-ano" to current year, then store calculated value in
         * variable "$aniversario", wich should be "1" if nothing is stored in "wpcf-ano"
         */
        $ano = get_post_meta($post_id, \'wpcf-ano\', TRUE);
        if (!empty($ano)) {
            $year_diff = date("Y") - $ano;
            $aniversario = $year_diff;
        } else {
            $aniversario = 1;
        }

        // update custom field
        update_post_meta($post_id, \'aniversario\', $aniversario);
    }

}

// Schedule Cron Job Event
function update_fecha_cron_job() {

    if (!wp_next_scheduled(\'run_update_fecha_cron_job\')) {
        wp_schedule_event(current_time(\'timestamp\'), \'daily\', \'run_update_fecha_cron_job\');
    }

}
add_action(\'wp\', \'update_fecha_cron_job\');
add_action(\'run_update_fecha_cron_job\', \'run_update_fecha_cron_job\');

1 个回复
最合适的回答,由SO网友:mmm 整理而成

的第三个参数wp_schedule_event 是要调用的操作:
https://codex.wordpress.org/Function_Reference/wp_schedule_event

然后,您需要将函数挂接到如下操作:

add_action("run_update_fecha_cron_job", "run_update_fecha_cron_job");

结束

相关推荐

从wp-cron切换到服务器cron作业

我正在创建一个wordpress插件,用于交易加密货币。这是一个机器人,我需要每10秒检查一次货币值。为了做到这一点,我需要通过cron作业运行PHP脚本。我曾尝试使用wordpress cron作业,但它们在执行时间方面并不可靠。我想问:有没有办法在使用CPanel的服务器上每隔10秒执行一次cron作业?我试过在CPanel上使用cronjob,但它们的粒度只有一分钟,还不够提前谢谢