我有一个自定义的帖子类型,叫做“status”,并且我在帖子类型中禁用了“title”。现在,它正在将所有帖子的标题设置为“自动草稿”。我想设置一种方法,将标题设置为帖子的日期。我想我应该使用“wp\\u insert\\u post\\u data”。现在我正在使用以下代码,但它不起作用:
function status_title_filter( $data , $postarr )
{
if ($postarr[\'post_type\'] == \'status\'){
$date = $data[\'post_date\'];
$data[\'post_title\'] = $date;
}
return $data;
}
add_filter( \'wp_insert_post_data\' , \'status_title_filter\' , \'99\' );
提前感谢您解决了我的简单问题。说到这类事情,我是个新手。
SO网友:Ian Dunn
不管法典怎么说,postarr美元并不总是被传递进来,所以你应该只使用$数据$然而,data不是一个有意义的变量名,所以我更喜欢$cleanPost。我也会尝试删除过滤器上的优先级,因为它通常不是必需的。设置slug也是一个好主意(post_name
) 除了标题之外,还要避免在自动草稿和垃圾/非垃圾操作上运行代码。看看这是否有效:
function status_title_filter( $cleanPost )
{
if( $cleanPost[\'post_type\'] == \'status\' && $cleanPost[\'post_status\'] != \'auto-draft\' && $_GET[\'action\'] != \'trash\' && $_GET[\'action\'] != \'untrash\' )
$cleanPost[\'post_title\'] = $cleanPost[\'post_name\'] = $cleanPost[\'post_date\'];
return $cleanPost;
}
add_filter( \'wp_insert_post_data\', \'status_title_filter\' );
<小时>
Update: 我认为您没有看到$postarr的原因是,默认情况下,操作回调只接受一个参数。如果您想要更多,则必须在挂钩中指定,如
add_action( \'wp_insert_post_data\', \'my_callback_function\', 10, 2)
. 这将把优先级设置为10,参数数量设置为2。