2015-11-29 3 views
0

Привет, я пытаюсь превратить функцию в короткий код. Я читал, как создать короткий код, однако, когда я превращаю свою функцию в короткий код, я получаю другой вывод.Создание короткого кода в Wordpress

В основном, когда вы нажимаете на область фокуса, все учителя, связанные с этой областью, будут показаны.

Код ниже прекрасно работает.

<?php $schools = $post->ID; // the current post id ?> 

    <?php 
    $args = array( 
     'post_type' => 'teacher', 
     'meta_query' => array(
      array(
       'key'  => 'areas_of_focus', 
       'value' => $schools, 
       'compare' => 'LIKE', 
      ), 
     ), 
    ); 

    $schools_data_query = new WP_Query($args); 

    ?> 

    <?php 

    if ($schools_data_query->have_posts()) { 
     echo '<ul>'; 
     while ($schools_data_query->have_posts()) { 
      $schools_data_query->the_post(); 
      //echo '<li>' . get_the_title() . '</li>'; 
      //echo '<li>' . get_permalink() . '</li>'; ?>   
      <li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> 

    <?php 
     } 
     echo '</ul>'; 
    } else { 
     // no posts found 
    } 

Теперь я хочу превратить его в короткий код. Вот то, что я до сих пор

function gm_list_teacher_shortcode($atts){ 
    $args = array( 
    'post_type' => 'teacher', 
    'meta_query' => array(
     array(
      'key'  => 'areas_of_focus', 
      'value' => $schools, 
      'compare' => 'LIKE', 
     ), 
    ), 
); 

    $schools_data_query = new WP_Query($args); 

    global $post; 
    $schools = $post->ID; 

    $content = ''; 
    $content .= '<ul>'; 

     while($schools_data_query->have_posts()) : $schools_data_query->the_post(); 

     $content .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; 

     endwhile; 


    $content .= '</ul>'; 

    wp_reset_query(); 

    return $content; 
} 

add_shortcode('gm_list_teacher', 'gm_list_teacher_shortcode'); 

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

$schools = $post->ID; 

Любая помощь будет очень ценится. Я никоим образом не отличный программист. Спасибо

+0

У меня бы получилось '$ school = $ post-> ID', прежде чем вы вызовете массив. – Aibrean

ответ

0

Попробуйте изменить этот код Пожалуйста, проверьте.

function gm_list_teacher_shortcode($atts){ 
    global $post; 
    $schools = $post->ID; 
    $args = array( 
    'post_type' => 'teacher', 
    'meta_query' => array(
     array(
      'key'  => 'areas_of_focus', 
      'value' => $schools, 
      'compare' => 'LIKE', 
     ), 
    ), 
); 
    $schools_data_query = new WP_Query($args); 
    global $post; 
    $schools = $post->ID; 
    $content = ''; 
    $content .= '<ul>'; 
     while($schools_data_query->have_posts()) : $schools_data_query->the_post(); 
     $content .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; 
     endwhile; 
    $content .= '</ul>'; 
    wp_reset_query(); 
    return $content; 
} 
add_shortcode('gm_list_teacher', 'gm_list_teacher_shortcode'); 
+0

Благодарим за предложение, к сожалению, я получаю одинаковые результаты – Hashtag

+0

Какой результат получить? –

Смежные вопросы