如何将自定义帖子元添加到默认博客帖子?

时间:2016-02-15 作者:N00b

我有一个计算博客文章预计阅读时间的代码(可以随意使用):

function estimated_reading_time( $post ) {

    $words = str_word_count( strip_tags( $post->post_content ) );

    //Average reading speed of an adult is 200-250 words per minute
    $minutes = floor( $words / 200 );
    $seconds = floor( $words % 200 / ( 200 / 60 ) );

    //At least a minute
    if ( $minutes >= 1 ) {

        $estimated_time = $minutes . \' minute\' . ( $minutes == 1 ? \'\' : \'s\' ) . \', \' . $seconds . \' second\' . ( $seconds == 1 ? \'\' : \'s\' );
    } 
    //Less than a minute
    else {

        $estimated_time = $seconds . \' second\' . ($seconds == 1 ? \'\' : \'s\');
    }

    return $estimated_time;
}
Problem: 此函数适用于页面生成循环,但是没有必要对博客中每个页面加载中的每个博客帖子运行此函数。将其保存为post meta会更明智。

<小时>Question: 如何保存$estimated_time 作为WordPress默认博客帖子的帖子元?

是否有任何操作、挂钩或回调可用于functions.php 还是在插件中?

附言它应该在创建帖子时以及以后编辑帖子时保存该值。。

2 个回复
最合适的回答,由SO网友:Sören Wrede 整理而成

你可以使用动作钩save_post_{post_type}, 因此,对于帖子类型“post”(博客帖子),它是:save_post_post. 有关更多信息,请参阅codex.

add_action( \'save_post_post\', \'sw150216_save_reading_time\', 10, 3);

function sw150216_save_reading_time( $post_id, $post, $update ) {
    $reading_time = estimated_reading_time( $post );
    if ( $update ) {
        update_post_meta ( $post_id, \'reading_time\', $reading_time );
    } else {
        add_post_meta( $post_id, \'reading_time\', $reading_time, true );
    }
}

SO网友:BillK

将函数挂钩到save_post. 使用add_post_meta 为新帖子或更新添加字段(如果这是编辑)。请参见Codex 用于添加和更新自定义字段。

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果