如何仅在内容更改时才更新帖子的“Modify_Time”?

时间:2014-02-20 作者:Renfei Song

出于某些原因,我在博客中向我的用户显示上次修改的信息。最近我必须清理我的类别和标签,但这些操作将导致更新帖子的“上次修改”字段,这实际上不是我想要的。

内容更新是读者真正关心的,而不是元信息(如标签、类别、自定义字段、描述等)。

那么,有没有办法只在内容更改时更新帖子的“上次修改”字段?

3 个回复
SO网友:Sudeep K Rana

我想,只有当文章内容更新时,才有确切的方法检索时间,除非你更改wordpress的核心功能,否则可能会导致其他一些问题。但我想在这里提出一个变通办法。

只有通过修订更新内容时,才能检索时间/日期。只有在更改帖子内容时才会创建修订,否则不会创建。

但是,除了一组参数外,没有确切的方法只能检索日期/时间。

使用此代码,它将为您提供一个包含所需数据的字符串:

<?php 
    echo wp_post_revision_title_expanded($post,false);
?>
现在可以做的是提取变量中的完整字符串,并使用正则表达式提取所需内容。

参考号:Codex link. 这里什么都没有。

编辑:(thanx用于函数更新)

这是基于wp_post_revision_title() 并按预期工作。

<?php
    $revision_data = wp_post_revision_title( $post ,false );
    $date_time = explode(\'@\', explode(\'[\', $revision_data)[0]);
    echo \'<p>Date:\'.$date_time[0].\'</p>\';
    echo \'<p>Time:\'.$date_time[1].\'</p>\';
?>

SO网友:s_ha_dum

原油和最低限度的测试,但。。。

function post_content_check_wpse_135268($data,$postarr){
  if (empty($postarr[\'ID\'])) return $data;
  $old = get_post($postarr[\'ID\']);
  if (!empty($old) && ($old->post_content === $data[\'post_content\'])) {
    $data[\'post_modified\'] = $old->post_modified;
    $data[\'post_modified_gmt\'] = $old->post_modified_gmt;
  }
  return $data;
}
add_action(\'wp_insert_post_data\',\'post_content_check_wpse_135268\',10,2);
代码将数据库中的现有帖子内容与新帖子内容进行比较。如果它们相同,则使用旧的修改日期信息。这意味着只有在帖子内容发生变化时,日期才会发生变化。

这个比较非常粗糙——一个简单的===. 您可能需要更复杂的内容,例如,可以忽略伪空白的内容。

SO网友:Marko

我对@s\\u ha\\u dum的答案做了一些修改,以更好地满足我的需要。如果帖子中添加的字符少于30个,那么时间不会改变。

add_action(\'wp_insert_post_data\', \'post_content_check_wpse_135268\', 10, 2);
function post_content_check_wpse_135268($data, $postarr) {

    if (empty($postarr[\'ID\'])) 
        return $data;

    $old = get_post($postarr[\'ID\']);
    $old_content_length = strlen($old->post_content);
    $new_content_length = strlen($data[\'post_content\']);

    // Calculate length between old and new content
    $length_difference = abs($old_content_length - $new_content_length);

    // If new content has less than 30 new characters then set modified time to previous time
    if (!empty($old) && $length_difference < 30) {

        $data[\'post_modified\'] = $old->post_modified;
        $data[\'post_modified_gmt\'] = $old->post_modified_gmt;

    }

    return $data;

}

结束