Как вытащить данные настраиваемого поля в шорткоды Wordpress

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

Вот шорткод, который я использую

add_shortcode('illidan', 'illidan');

function illidan($args) {
    $default = array('icon' => 'true');
    $args = wp_parse_args($args, $default);

    $herotip = '';
    if ($args['icon']) {
        $herotip.= '<img src="http://stormable.com/img/heroes/illidan/illidan-ab1.png">';
    }

    $herotip.= '<a href="http://stormable.com/heroes/illidan/">Illidan</a>
    This is where I would like to pull in custom field data from the post illidan
    For example <?php echo get_post_meta($post->ID, "health-lvl1", true); ?>
    ';

    return $herotip;
}

Поэтому по ссылке я хотел бы иметь возможность извлекать данные, которые у меня есть в настраиваемых полях, из сообщения Illidan в пользовательском типе сообщения heroes, хотя я не уверен, как связать его с этой страницей.


person Greenhoe    schedule 21.03.2014    source источник
comment
global $post — это все, что вам нужно для доступа к текущему сообщению.   -  person Ohgodwhy    schedule 21.03.2014
comment
Спасибо, но проблема в том, что этого не будет в текущем посте, это будут другие посты на сайте.   -  person Greenhoe    schedule 21.03.2014
comment
Затем вам нужно будет создать новый запрос на основе ваших требований, а затем выполнить обычную итерацию цикла. if($posts->have_posts(); while($posts->have_posts()): $posts->the_post(); // endwhile; endif;   -  person Ohgodwhy    schedule 21.03.2014
comment
Как мне добавить это в свой шорткод? просто поставить php прямо в него?   -  person Greenhoe    schedule 21.03.2014
comment
Итак, пост Illidan имеет следующий URL: http://stormable.com/heroes/illidan/? Будет ли URL-адрес когда-либо меняться? Или идентификатор поста?   -  person brasofilo    schedule 21.03.2014
comment
@brasofilo Да, это URL-адрес, а идентификатор сообщения равен 11, и ни один из них никогда не изменится.   -  person Greenhoe    schedule 21.03.2014
comment
@Greenhoe, вам нужен этот шорткод только для illidan сообщения?   -  person jogesh_pi    schedule 21.03.2014
comment
@jogesh_pi Я хочу получить данные настраиваемого поля только из сообщения illidan, но фактический короткий код будет размещен по всему сайту в разных сообщениях.   -  person Greenhoe    schedule 21.03.2014


Ответы (1)


Это возвращает значение настраиваемого поля из метаданных сообщения.

 // returns the value of health-gain
 $health_gain = get_post_meta( 11, 'health-gain', true); 


 $herotip.= '<a href="http://stormable.com/heroes/illidan/">Illidan</a>
This is where I would like to pull in custom field data from the post illidan
For example '. $health_gain;

взгляните на эту ссылку get_post_meta(), внедрите ее в свою функцию шорткода, где хотите.

Предлагаю вам ознакомиться с этой статьей http://wp.smashingmagazine.com/2012/05/01/wordpress-shortcodes-complete-guide/ расскажет вам о более надежном и правильном способе создания шорткода.

person jogesh_pi    schedule 21.03.2014
comment
Спасибо, и я использовал эту статью в качестве руководства, хотя я еще не силен в PHP. Как вывести get_post_meta(11, 'улучшение здоровья'); внутри '', который у меня есть вместе со ссылкой, так как кажется, что все, что я туда добавляю, просто отображается как HTML - person Greenhoe; 21.03.2014
comment
Спасибо, все отлично работает, последний вопрос. В get_post_meta вместо использования идентификатора сообщения есть ли способ использовать слаг сообщения вместо этого? - person Greenhoe; 21.03.2014
comment
@Greenhoe для этого вам нужно использовать WP_Query и сделать запрос, который найдет конкретное имя сообщения (illidan) в определенном post_type (герои), который вернет вам идентификатор сообщения этого конкретного сообщения. - person jogesh_pi; 21.03.2014
comment
@Greenhoe, но если у вас есть одно и то же настраиваемое поле в каждом сообщении, вам нужно использовать $post->ID вместо WP_Query с глобальным $post; - person jogesh_pi; 21.03.2014