如何在帖子状态更新时使用类别名称自动更新帖子标题和插件

时间:2016-03-09 作者:Grandeto

每次更新帖子状态时,我都需要自动更新帖子标题和类别名称。有些函数是这样的,但代码正确。。。。

add_filter(\'wp_insert_post_data\',\'reset_post_date\',99,2);
   function reset_post_date($data,$postarr) {

   $data[\'post_title\'] = How to add category name here?

 //also update the slug of the post for the URL
     $data[\'post_name\'] = wp_unique_post_slug( sanitize_title( $data[\'post_title\'] ), $postarr[\'ID\'], $data[\'post_status\'], $data[\'post_type\'], $data[\'post_parent\'] );
     return $data;
  }
编辑我自己试过,但没有成功。现在我正在尝试仅当状态从草稿更改为发布时运行此函数。。。但同样没有成功。

add_filter( \'the_title\', \'my_modify_title\', 10, 2 );
 function my_modify_title( $title, $id ) {
  if( in_category( \'My Category\', $id ) ) {
   $title = \'My Category\';
 }
  if( in_category( \'New Category\', $id ) ) {
   $title = \'New Category\';
 }
return $title;
}
以及

add_action(\'draft_to_publish\', \'my_modify_title\', 10, 2);
如何在一个函数中添加过滤器和操作以使其协同工作?

1 个回复
SO网友:prosti

你需要post status transitions, 与这篇文章非常相似:

只需更新帖子标题和slug,这很简单。

Update post examples


既然你这样写:

add_filter( \'the_title\', \'my_modify_title\', 10, 2 );
 function my_modify_title( $title, $id ) {
  if( in_category( \'My Category\', $id ) ) {
   $title = \'My Category\';
 }
  if( in_category( \'New Category\', $id ) ) {
   $title = \'New Category\';
 }
return $title;
}
请注意codex 是说“the\\u title”应该只在循环中起作用。我永远不会更新循环中的slug。在我看来,循环更像是一种绘制帖子内容的方式。

另请注意,如果尝试更新标题:

$title = $title. "My Category";
会更常见。

我的建议是:

add_action(\'draft_to_publish\', \'my_modify_title\', 10, 2);
function my_modify_title ($post){
   // your work to update post slug and title.

    $current_title = $post->post_title;
    $current_slug = $post->post_name;

    $new_slug = ...;
    $new_title = ...;



    wp_update_post(
        array (
            \'ID\'        => $post->ID,
            \'post_name\' => $new_slug, 
            \'post_title\'=> $new_title
        )
    );

   return;    
}
函数中有最后的代码。php或其他更好的地方。

看看这个ref: