Не получается получить ID записи в functions.php?

6 февр. 2015 г., 08:04:02
Просмотры: 14.7K
Голосов: 5

Мне нужно получить ID текущей записи в функции, которую я написал в functions.php. Но я не могу получить ID. Я пробовал несколько методов.

Например:

get_the_ID(); //возвращает false 


global $post;
$id = $post->ID; //возвращает null  

global $wp_query
$id =$wp_query->get_queried_object_id(); //возвращает 0 

$url = 'http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$id = url_to_postid($url); //возвращает 0 

Я использую последнюю версию WordPress. Что мне теперь делать?

ОБНОВЛЕНИЕ: Мне нужен ID записи в функции ниже.

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
Комментарии

Какова ваша функция? Редактировать ваш вопрос и опубликовать код функции.

Robert hue Robert hue
6 февр. 2015 г. 08:07:51

если функция: function example(){ global $post; return $id=$post->ID; } и используется в single.php, или page.php, в общем случае она должна возвращать ID этого поста/страницы, и чтобы увидеть это в действии, вам нужно вывести её там echo example();

Mayeenul Islam Mayeenul Islam
6 февр. 2015 г. 08:10:15

@Roberthue Я отредактировал свой вопрос

shuvroMithun shuvroMithun
6 февр. 2015 г. 08:18:59

@MayeenulIslam на самом деле мне не нужно ничего выводить, мне просто нужно обновить мета-значение при отправке формы или при клике на определенную ссылку.

shuvroMithun shuvroMithun
6 февр. 2015 г. 08:20:25

@user1750063 Я понимаю. Я просто имел в виду, что вы можете это протестировать.

Mayeenul Islam Mayeenul Islam
6 февр. 2015 г. 08:23:36

Хук init срабатывает до того, как устанавливается ID записи, поэтому он всегда будет возвращать false, null или 0

Pieter Goosen Pieter Goosen
6 февр. 2015 г. 08:25:37

Как мне получить ID записи в этой функции? @PieterGoosen

shuvroMithun shuvroMithun
6 февр. 2015 г. 08:27:16

Посмотрите этот пост

Pieter Goosen Pieter Goosen
6 февр. 2015 г. 08:31:53
Показать остальные 3 комментариев
Все ответы на вопрос 1
0
10

ID записи становится доступен после выполнения запроса.

Первый безопасный хуков для получения ID записи — это 'template_redirect'.

Если вы можете модифицировать вашу функцию, чтобы она принимала ID записи в качестве аргумента, например:

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

То вы можете сделать так:

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

Я использовал get_queried_object_id() для получения ID текущей запрашиваемой записи.

Если вам абсолютно необходимо вызывать вашу функцию на раннем хуке, таком как 'init', вы можете использовать url_to_postid(), а также home_url() + add_query_arg() для получения текущего URL:

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

Обратите внимание, что второй метод менее производительный, потому что url_to_postid() заставляет WordPress парсить правила перезаписи, поэтому, если возможно, используйте первый метод.

6 февр. 2015 г. 12:58:31