因此,每次保存帖子时,都要用自定义字段中的另一个值替换刚保存的标题的值。。。
似乎你应该把你想要的头衔放在实际的头衔字段中。
但我假设这是出于表示目的:您希望自定义帖子类型根据自定义字段的值在前端显示不同的标题。过滤器是实现这一点的简单方法。
the_title
, 通用模板标记是一个非常薄的包装get_the_title
, 其中包含一个名为the_title
. 它有两个参数:实际标题和帖子ID。钩住它并根据自定义字段更改标题。
<?php
add_filter( \'the_title\', \'wpse33385_filter_title\', 10, 2 );
function wpse33385_filter_title( $title, $post_id )
{
if( $new_title = get_post_meta( $post_id, \'custom_field_name\', true ) )
{
return $new_title;
}
return $title;
}
A few things about your code to keep in mind:
操作不会任意接收参数。连接到的函数
init
例如,不要将任何参数传递给他们。什么时候
do_action
调用时,第一个参数是挂钩名称。如果需要,后续参数将传递给hooked in函数(由的第四个选项参数指定
add_action
).
这个do_action( \'init\' );
呼叫处于wp设置中。php。Take a look, 没有参数。
因此:
<?php
add_action(\'init\', \'listing_save_post\');
function listing_save_post( $post_id ) {
if ( ! defined( \'DOING_AUTOSAVE\' ) && ! DOING_AUTOSAVE ) return;
add_action(\'save_post\', \'custom_post_type_title\', 100);
add_action(\'publish_post\', \'custom_post_type_title\', 100);
}
不会像你期望的那样工作。此外
add_action
调用函数内部,可以只对自己的函数外部进行调用。。。这很好:
add_action(\'save_post\', \'custom_post_type_title\', 100);
function custom_post_type_title( $post_id ) {
// do stuff
}
只需要在
save_post
, 不在那上面
publish_post
我总是尽量避免直接去$wpdb
如果可以的话,因为很多时候都有更方便的API。你想做的是更新帖子。So使用wp_update_post
. 在您的情况下,这不是一个有效的选项(正如法典所述,它可能会导致无限循环)。
抱歉,那有点冗长。希望它澄清了WordPress挂钩系统的一些问题!
让这些成为你最好的朋友:
WP挂钩数据库:http://adambrown.info/p/wp_hooks/hook http://xref.yoast.com/