¿No puede obtener la ID de la publicación en functions.php?

2

Necesito el ID de la publicación actual en una función, que he escrito en functions.php. Pero no puedo conseguir la identificación. He intentado varios metodos

Me gusta

get_the_ID(); //returns false 


global $post;
$id = $post->ID; //returns null  

global $wp_query
$id =$wp_query->get_queried_object_id(); //returns 0 

$url = 'http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$id = url_to_postid($url); //returns 0 

Estoy usando la última versión de wordpress. ¿Qué puedo hacer ahora?

ACTUALIZACIÓN: Necesito post id en la siguiente función.

function em_change_form(){
    $id = get_the_ID();
    if(isset($_GET['reg_typ'])) {
        $reg_type = $_GET['reg_typ'];
        if($reg_type =='vln'){
            update_post_meta($id,'custom_booking_form', 2);
        } elseif ($reg_type == 'rsvp') {
            update_post_meta($id,'custom_booking_form', 1);
        }
    }
}

add_action('init','em_change_form');
    
pregunta shuvroMithun 06.02.2015 - 07:04

1 respuesta

5

La ID de publicación está disponible después de que se haya activado la consulta.

El primer enlace en el que es seguro obtener el ID de publicación es 'template_redirect' .

Si puede modificar su función para aceptar un ID de publicación como argumento, así:

function em_change_form($id){
    $reg_type = filter_input(INPUT_GET, 'reg_typ', FILTER_SANITIZE_STRING);
    if($reg_type === 'vln'){
      update_post_meta($id,'custom_booking_form', 2);
    } elseif ($reg_type == 'rsvp') {
      update_post_meta($id,'custom_booking_form', 1);
    }
}

Puedes hacer:

add_action('template_redirect', function() {
  if (is_single())
     em_change_form(get_queried_object_id());
  }
});

He usado get_queried_object_id() para obtener el ID de la consulta actual.

Si absolutamente necesita llamar a su función en un primer enlace como 'init' , puede usar url_to_postid() y home_url() + add_query_arg() para obtener la url actual:

add_action('init', function() {
  $url = home_url(add_query_arg(array()));
  $id = url_to_postid($url);
  if ($id) {
     em_change_form($id);
  }
});

Tenga en cuenta que el segundo método es menos eficiente porque url_to_postid() obliga a WordPress a analizar las reglas de reescritura, por lo que si puede, use el primer método.

    
respondido por el gmazzap 06.02.2015 - 11:58

Lea otras preguntas en las etiquetas