Получить идентификатор сообщения для шорткода на основе Atts

Я хочу создать шорткод для своих сообщений, чтобы я мог ввести $atts, который будет слагом для сообщения в моем пользовательском типе сообщения, который я могу использовать, чтобы получить идентификатор этого сообщения, чтобы я мог получить метаданные в шорткоде.

add_shortcode('stats', 'stats');
function stats($atts) {
array(
    'hero' =>'',
);

$HeroSlug = $atts['hero']; 

$HeroPostID = I need this to grab the post ID based off the the $atts 'hero' which is the post's slug

$output =  echo get_post_meta($HeroPostID 'hero-sub-name', true);

return $output;
}

Таким образом, в шорткоде я бы добавил [stats hero="illidan"] illidan - это слаг для этого сообщения пользовательского типа, из которого я хочу получить идентификатор. Я просто не знаю, как взять этот слаг и получить идентификатор. этого поста, чтобы я мог использовать его в переменной $HeroPostID.


person Greenhoe    schedule 31.03.2014    source источник


Ответы (2)


add_shortcode('статистика', 'stats_func'); функция stats_func($atts) {

    extract( shortcode_atts( array(
        'hero' => ''

    ), $atts ) );
    if(strlen($hero) < 1){ return; }
    $the_slug = $hero;
    $args=array(
        'name' => $the_slug,
        'post_type' => 'post',
        'post_status' => 'publish',
        'numberposts' => 1
    );
    $my_posts = get_posts($args);
    if( $my_posts ) {
        $HeroPostID = $my_posts[0]->ID;
    }
}

//редактировать Вот как я бы это сделал.

person Mat Taylor    schedule 31.03.2014
comment
Спасибо, похоже, это работает, за исключением того, как я могу сделать то, что вводится в качестве атрибута героя для шорткода = $the_slug, поскольку шорткод будет [stats hero=illidan] или [stats hero=nova]. когда-либо я помещал атрибут героя под имя в массиве. - person Greenhoe; 31.03.2014
comment
Ах да, мне не нужен $the_slug, я просто заменил его на $HeroSlug под именем, так как он уже определен и работает. Спасибо большое. - person Greenhoe; 31.03.2014
comment
Отметить как ответ :) хорошего дня! - person Mat Taylor; 31.03.2014
comment
Не могли бы вы объяснить мне эту строку if(strlen($hero) ‹ 1){ return; } и цель этого? Я все еще изучаю PHP, поэтому я все понимаю, просто не уверен в цели этого оператора if. - person Greenhoe; 31.03.2014
comment
Если длина строки (strlen($hero)) для hero меньше 1 (т. е. они не предоставили аргумент), верните (завершите функцию) и ничего не верните. - person Mat Taylor; 31.03.2014

Вы пробовали get_the_ID() ? Это даст текущий идентификатор сообщения, на котором отображается шорткод.

person Trishul    schedule 31.03.2014
comment
Я не ищу идентификатор сообщения, на котором отображается шорткод, а идентификатор сообщения слага, который когда-либо помещался как hero=, поэтому, если я поставлю [stats hero=illidan, мне нужен идентификатор сообщения из сообщения с слизняк иллидан. - person Greenhoe; 31.03.2014
comment
В этом случае перейдите по этой ссылке blog.wpessence.com/get -post-by-slug-name-id-methods - person Trishul; 31.03.2014