在保存/更新

时间:2018-05-01 02:00:55

标签: php wordpress advanced-custom-fields custom-fields

我希望每次保存/更新帖子时动态更改WordPress帖子的永久链接(post_name),方法是从帖子中的自定义字段中提取并用此值替换永久链接。我在functions.php内的代码正常工作,只是它将-2附加到永久链接。我认为这是因为某些事情发生了两次,第一次导致我想要的固定链接,第二次导致WordPress通过添加-2来响应“重复”。

这是当前的代码:

add_action('save_post', 'change_default_slug');

function change_default_slug($post_id) {

if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
return;

if ( !current_user_can('edit_post', $post_id) ) 
return;

remove_action('save_post', 'change_default_slug');

wp_update_post(array('ID' => $post_id, 'post_name' =>get_post_meta($post_id,'request_number',true)));;

add_action('save_post', 'change_default_slug');
}

1 个答案:

答案 0 :(得分:0)

我会尝试一下...

现在,假设您正在为自定义字段使用 ACF... 如果没有,只需使用 WP 自定义元函数更新代码即可。哦,别忘了用你的 ACF 字段密钥更改 field_5fed2cdbc1fd2

add_filter('save_post', 'change_post_name', 20, 1);
function change_post_name($post_id)
{

  $post_type = get_post_type();
  if ($post_type == "post"){

                
     $acf_title_field = $_POST['acf']['field_5fed2cdbc1fd2']; // get the field data by $_POST

    if (!empty($acf_title_field)) {

        // update the title in database
        $wpdb->update($wpdb->posts, array('post_title' => $acf_title_field, 'post_name' => sanitize_title($acf_title_field)), array('ID' => $post_id));  

    }
  }
}

add_filter( 'wp_insert_post_data', 'update_post_name', 50, 2 );
function update_post_name( $data, $postarr ) {
    $post_type = get_post_type();
    if ($post_type == "post"){
        //Check for the  post statuses you want to avoid
        if ( !in_array( $data['post_status'], array( 'draft', 'pending', 'auto-draft' ) ) ) {  

            $acf_title_field = $_POST['acf']['field_5fed2cdbc1fd2']; // get the field data by $_POST
            // $data['post_name'] = sanitize_title( $data['post_title'] );
            $data['post_name'] = sanitize_title( $acf_title_field );

        }
    return $data;
    }
}