Nu pot obține ID-ul postării în functions.php?

6 feb. 2015, 08:04:02
Vizualizări: 14.7K
Voturi: 5

Am nevoie de ID-ul postării curente într-o funcție scrisă în functions.php. Dar nu pot obține ID-ul. Am încercat mai multe metode.

De exemplu:

get_the_ID(); //returnează false 


global $post;
$id = $post->ID; //returnează null  

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

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

Folosesc cea mai recentă versiune de WordPress. Ce pot face acum?

ACTUALIZARE: Am nevoie de ID-ul postării în funcția de mai jos.

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');
8
Comentarii

Care este funcția ta? Editează întrebarea ta și postează codul funcției.

Robert hue Robert hue
6 feb. 2015 08:07:51

dacă funcția este: function example(){ global $post; return $id=$post->ID; } și este folosită în single.php, sau page.php în general ar trebui să returneze id-ul acelui post/pagină, iar pentru a vedea asta în acțiune trebuie să o afișezi acolo echo example();

Mayeenul Islam Mayeenul Islam
6 feb. 2015 08:10:15

@Roberthue Am editat întrebarea mea

shuvroMithun shuvroMithun
6 feb. 2015 08:18:59

@MayeenulIslam de fapt nu am nevoie să afișez nimic, doar să actualizez valoarea meta atunci când un formular este trimis sau când se face clic pe un anumit link.

shuvroMithun shuvroMithun
6 feb. 2015 08:20:25

@user1750063 Știu asta. Voiam doar să spun că poți testa.

Mayeenul Islam Mayeenul Islam
6 feb. 2015 08:23:36

Hook-ul init este declanșat înainte de setarea ID-ului postului, așa că va returna întotdeauna false, null sau 0

Pieter Goosen Pieter Goosen
6 feb. 2015 08:25:37

Cum pot obține ID-ul postării în acea funcție? @PieterGoosen

shuvroMithun shuvroMithun
6 feb. 2015 08:27:16

Aruncă o privire la această postare

Pieter Goosen Pieter Goosen
6 feb. 2015 08:31:53
Arată celelalte 3 comentarii
Toate răspunsurile la întrebare 1
0
10

ID-ul postării este disponibil după ce interogarea a fost executată.

Primul hook în care este sigur să obții ID-ul postării este 'template_redirect'.

Dacă poți modifica funcția ta să accepte un ID de postare ca argument, astfel:

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);
    }
}

Poți face:

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

Am folosit get_queried_object_id() pentru a obține ID-ul postării curente din interogare.

Dacă ai nevoie neapărat să apelezi funcția ta într-un hook timpuriu precum 'init', poți utiliza url_to_postid(), și home_url() + add_query_arg() pentru a obține URL-ul curent:

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

Reține că a doua metodă este mai puțin performantă deoarece url_to_postid() forțează WordPress să analizeze regulile de rescriere, așa că dacă poți, folosește prima metodă.

6 feb. 2015 12:58:31