每次更新帖子状态时,我都需要自动更新帖子标题和类别名称。有些函数是这样的,但代码正确。。。。
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);
如何在一个函数中添加过滤器和操作以使其协同工作?
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: