创建函数以替换 post 标题不起作用
Creating function to replace post title not working
我正在尝试在 functions.php
中创建一个函数,用来自多个自定义字段的信息替换自定义 post 标题。在发布 post 之前,我想评估它是否已经创建或者这是一个新的 post;如果是一个新的post,我想从几个字段中获取信息,统计这个自定义post类型中post的总数并创建标题;如果这只是编辑已经存在的 post,我想使用 $_POST['post_title']
字段中的内容。
function custom_field_value_as_title( $value, $post_id, $field ) {
global $_POST;
// vars
$title = $_POST['post_title'];
$post = get_page_by_title( $title, 'OBJECT', 'mascotas' );
if ( FALSE === get_post_status( $post_id ) ) {
$new_title_ciudad = get_field('ciudad', $post_id);
$new_title_sexo = get_field('sexo', $post_id);
$new_title_especie = get_field('especie' , $post_id);
$registered_year = date("y");
$count_mascotas = wp_count_posts('mascotas');
$next_count = $count_mascotas->publish + 1;
$new_count = sprintf("%04d", $next_count);
$new_title = "$new_title_ciudad"."$new_title_sexo"."$new_title_especie"."$registered_year"."-"."$new_count";
// update post
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
// Update the post into the database
wp_update_post( $my_post );
} else {
// vars
$new_title = $_POST['post_title'];
// update post
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
// Update the post into the database
wp_update_post( $my_post );
}
}
add_filter('acf/update_value', 'custom_field_value_as_title', 10, 3);
它确实适用于已创建的 post,但它不是 运行 创建自定义 post 标题的函数部分。有什么建议么?提前致谢!
我用 KSNO 建议的函数替换了我的函数:
<?php
function title_replace_function( $post_id, $post ) {
if ( $post->post_date == $post->post_modified ) {
global $_POST;
$new_title_ciudad = get_field('ciudad', $post_id);
$new_title_sexo = get_field('sexo', $post_id);
$new_title_especie = get_field('especie' , $post_id);
$registered_year = date("y");
$count_mascotas = wp_count_posts('mascotas');
$next_count = $count_mascotas->publish + 1;
$new_count = sprintf("%04d", $next_count);
$new_title = "$new_title_ciudad"."$new_title_sexo"."$new_title_especie"."$registered_year"."-"."$new_count";
// update post
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
// Update the post into the database
wp_update_post( $my_post );
} else {
// vars
$new_title = $_POST['post_title'];
// update post
// http://codex.wordpress.org/Function_Reference/wp_update_post
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
// Update the post into the database
wp_update_post( $my_post );
}
}
add_action( 'publish_post', 'title_replace_function', 10, 2 );
?>
当它评估 post 是否不是 "NEW" 时它工作正常。但是它没有获取自定义字段值来为新 post 创建新标题。标题字段为空。我什至尝试将一个自定义字段的值添加到“$new_title”变量中,但什么也没有
if ( get_post_status( $post_id ) === FALSE ) {
wp_update_post( $my_post );
}
永远不会发生。如果返回 false,则表示 post 不存在。您无法真正更新不存在的 post。 Check source code of the function.
我认为完成任务的方法很少,但我只推荐其中一种。
function title_replace_function( $post_id, $post ) {
if ( $post->post_date == $post->post_modified ) {
// code for new post
} else {
// code for edited post
}
}
add_action( 'publish_post', 'title_replace_function', 10, 2 );
编辑
好吧,没我想的那么容易。这里经过测试,防止无限循环(注意循环Example 1 and Example 2)一段代码,适合您的需要:
function title_replace_function( $post_id, $post ) {
if ( ! wp_is_post_revision( $post_id ) ) {
remove_action('save_post', 'title_replace_function');
if ( $post->post_date == $post->post_modified ) {
global $_POST;
$new_title_ciudad = get_field('ciudad', $post_id);
$new_title_sexo = get_field('sexo', $post_id);
$new_title_especie = get_field('especie' , $post_id);
$registered_year = date("y");
$count_mascotas = wp_count_posts('mascotas');
$next_count = $count_mascotas->publish + 1;
$new_count = sprintf("%04d", $next_count);
$new_title = "$new_title_ciudad"."$new_title_sexo"."$new_title_especie"."$registered_year"."-"."$new_count";
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
wp_update_post( $my_post );
} else {
$new_title = 'new_title';
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
wp_update_post( $my_post );
}
add_action('save_post', 'my_function');
}
}
add_action( 'save_post', 'title_replace_function', 10, 3 );
我正在尝试在 functions.php
中创建一个函数,用来自多个自定义字段的信息替换自定义 post 标题。在发布 post 之前,我想评估它是否已经创建或者这是一个新的 post;如果是一个新的post,我想从几个字段中获取信息,统计这个自定义post类型中post的总数并创建标题;如果这只是编辑已经存在的 post,我想使用 $_POST['post_title']
字段中的内容。
function custom_field_value_as_title( $value, $post_id, $field ) {
global $_POST;
// vars
$title = $_POST['post_title'];
$post = get_page_by_title( $title, 'OBJECT', 'mascotas' );
if ( FALSE === get_post_status( $post_id ) ) {
$new_title_ciudad = get_field('ciudad', $post_id);
$new_title_sexo = get_field('sexo', $post_id);
$new_title_especie = get_field('especie' , $post_id);
$registered_year = date("y");
$count_mascotas = wp_count_posts('mascotas');
$next_count = $count_mascotas->publish + 1;
$new_count = sprintf("%04d", $next_count);
$new_title = "$new_title_ciudad"."$new_title_sexo"."$new_title_especie"."$registered_year"."-"."$new_count";
// update post
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
// Update the post into the database
wp_update_post( $my_post );
} else {
// vars
$new_title = $_POST['post_title'];
// update post
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
// Update the post into the database
wp_update_post( $my_post );
}
}
add_filter('acf/update_value', 'custom_field_value_as_title', 10, 3);
它确实适用于已创建的 post,但它不是 运行 创建自定义 post 标题的函数部分。有什么建议么?提前致谢!
我用 KSNO 建议的函数替换了我的函数:
<?php
function title_replace_function( $post_id, $post ) {
if ( $post->post_date == $post->post_modified ) {
global $_POST;
$new_title_ciudad = get_field('ciudad', $post_id);
$new_title_sexo = get_field('sexo', $post_id);
$new_title_especie = get_field('especie' , $post_id);
$registered_year = date("y");
$count_mascotas = wp_count_posts('mascotas');
$next_count = $count_mascotas->publish + 1;
$new_count = sprintf("%04d", $next_count);
$new_title = "$new_title_ciudad"."$new_title_sexo"."$new_title_especie"."$registered_year"."-"."$new_count";
// update post
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
// Update the post into the database
wp_update_post( $my_post );
} else {
// vars
$new_title = $_POST['post_title'];
// update post
// http://codex.wordpress.org/Function_Reference/wp_update_post
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
// Update the post into the database
wp_update_post( $my_post );
}
}
add_action( 'publish_post', 'title_replace_function', 10, 2 );
?>
当它评估 post 是否不是 "NEW" 时它工作正常。但是它没有获取自定义字段值来为新 post 创建新标题。标题字段为空。我什至尝试将一个自定义字段的值添加到“$new_title”变量中,但什么也没有
if ( get_post_status( $post_id ) === FALSE ) {
wp_update_post( $my_post );
}
永远不会发生。如果返回 false,则表示 post 不存在。您无法真正更新不存在的 post。 Check source code of the function.
我认为完成任务的方法很少,但我只推荐其中一种。
function title_replace_function( $post_id, $post ) {
if ( $post->post_date == $post->post_modified ) {
// code for new post
} else {
// code for edited post
}
}
add_action( 'publish_post', 'title_replace_function', 10, 2 );
编辑
好吧,没我想的那么容易。这里经过测试,防止无限循环(注意循环Example 1 and Example 2)一段代码,适合您的需要:
function title_replace_function( $post_id, $post ) {
if ( ! wp_is_post_revision( $post_id ) ) {
remove_action('save_post', 'title_replace_function');
if ( $post->post_date == $post->post_modified ) {
global $_POST;
$new_title_ciudad = get_field('ciudad', $post_id);
$new_title_sexo = get_field('sexo', $post_id);
$new_title_especie = get_field('especie' , $post_id);
$registered_year = date("y");
$count_mascotas = wp_count_posts('mascotas');
$next_count = $count_mascotas->publish + 1;
$new_count = sprintf("%04d", $next_count);
$new_title = "$new_title_ciudad"."$new_title_sexo"."$new_title_especie"."$registered_year"."-"."$new_count";
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
wp_update_post( $my_post );
} else {
$new_title = 'new_title';
$my_post = array(
'ID' => $post_id,
'post_title' => $new_title,
'post_name' => $post_id
);
wp_update_post( $my_post );
}
add_action('save_post', 'my_function');
}
}
add_action( 'save_post', 'title_replace_function', 10, 3 );