wordpress 用ACF场重写段块

0x6upsns  于 2023-11-17  发布在  WordPress
关注(0)|答案(1)|浏览(148)

我有一个函数,当你发布一条新闻时,会给它添加一个相关的ID号,这就是它:

function update_post_id_contenido($post_id) {
    $post_type = get_post_type($post_id);
    if ($post_type === 'post') {
        $id_contenido = get_field('id_contenido', $post_id);
        if (empty($id_contenido)) {
            $last_id_contenido = get_posts(array(
                'post_type' => 'post',
                'meta_key' => 'id_contenido',
                'orderby' => 'meta_value_num',
                'order' => 'DESC',
                'numberposts' => 1,
            ));
            $last_id_contenido_value = get_field('id_contenido', $last_id_contenido[0]->ID);
            if (empty($last_id_contenido_value)) {
                $new_id_contenido = 1000;
            } else {
                $new_id_contenido = $last_id_contenido_value + 1;
            }
            update_field('id_contenido', $new_id_contenido, $post_id);
        }
    }
}
add_action('acf/save_post', 'update_post_id_contenido', 20);

字符串
我的意图是,它保存了slug,以便在结尾时它的类型为domain.com/$id_contenido/$posttitle
我尝试了这个函数,但它返回一个内存限制错误。

function update_post_slug($post_id, $post, $update) {
  if ($post->post_type == 'post' && $post->post_status == 'publish') {
    $id_contenido = get_post_meta($post_id, 'id_contenido', true);
    $post_title = sanitize_title($post->post_title);
    $new_slug = $id_contenido . '/' . $post_title;
    wp_update_post([
      'ID' => $post_id,
      'post_name' => $new_slug,
    ]);
  }
}
add_action('save_post', 'update_post_slug', 10, 3);

35g0bw71

35g0bw711#

您收到一个内存限制错误,因为您的代码触发了一个无限循环。
save_post上调用函数update_post_slug,该函数调用函数wp_update_post,该函数触发动作save_post
一个简单的解决方法是让update_post_slug注销自己,以确保函数在生命周期内只调用一次:

function update_post_slug($post_id, $post, $update) {
  remove_action('save_post', 'update_post_slug', 10);
  //..the rest of your function
}

字符串

相关问题