获取您当前正在WordPress中编辑的帖子的帖子ID

时间:2019-02-27 20:57:59

标签: wordpress

我试图在functions.php中获取正在编辑的帖子的ID,以动态重写自定义帖子类型的子弹。

这是我目前正在使用的。

function change_post_type_slug( $args, $post_type ) {

  if ( 'custom_post' == $post_type ) {

    global $post;
    $location = get_field('custom_field', $post->ID);
    $args['rewrite']['slug'] = $location;

  }

  return $args;

}
add_filter( 'register_post_type_args', 'change_post_type_slug', 10, 2 );

我不确定在获取ID之前,钩子register_post_type_args是否正在触发,或者这甚至不是执行我要完成的任务的最佳方法。在该主题上找不到很多东西。

我能够使其与以下产品一起使用:

function change_post_type_slug( $args, $post_type ) {

  if ( 'lead_page' == $post_type ) {

    $post_id = $_GET['post'];
    $location = get_field('leadpage_location', $post_id);
    $args['rewrite']['slug'] = $location->post_name;

  }

  return $args;

}
add_filter( 'register_post_type_args', 'change_post_type_slug', 10, 2 );

但是它导致在前端发出通知: Notice: Undefined index: post in /path/to/wordpress/functions.php on line 623

第623行是$post_id = $_GET['post'];

3 个答案:

答案 0 :(得分:0)

更新:

尝试一下:

function change_post_types_slug( $args, $post_type ) {

   if ( 'your-custom_post' === $post_type ) {
        // Check and get the custom post ID 
        $id = isset($_GET[ 'post' ]) ? $_GET[ 'post' ] : '' ;
        // $location = get_field('leadpage_location', $id);
        $args['rewrite']['slug'] = 'new-slug-here';
   }

   return $args;
}
add_filter( 'register_post_type_args', 'change_post_types_slug', 10, 2 );

答案 1 :(得分:0)

为此,您应该使用updated_postmeta钩子,因为它在每次更新自定义字段时都会运行。

然后,您可以使用wp_update_post()功能更新帖子数据。

add_action( 'updated_postmeta', function( $meta_id, $object_id, $meta_key, $meta_value ) {

    if ( 'location' === $meta_key ) {
        wp_update_post([
            'ID' => $object_id,
            'post_name' => $meta_value,
        ]);
    }

}, 10, 4 );

答案 2 :(得分:0)

尝试一下:

function change_post_type_slug( $args, $post_type ) {

  if ( 'lead_page' === $post_type && is_admin() && $_GET['action'] === 'edit' ) {

    $post_id = $_GET['post'];
    $location = get_field('leadpage_location', $post_id);
    $args['rewrite']['slug'] = $location->post_name;

  }

  return $args;

}
add_filter( 'register_post_type_args', 'change_post_type_slug', 10, 2 );

它添加了另外两个条件,以检查您是否在管理屏幕上并检查GET的{​​{1}}参数。同样可能edit可能会过分杀伤,但现在您超级安全。