2015-12-04 81 views
0

我有以下WP查詢,它可以很好地工作。基本上它是如何工作的,在我的網站上我有不同的焦點領域。當你點擊其中一個重點領域時,例如數學或科學。將顯示所有與數學或科學相關的教師。將WP查詢轉換爲ShortCode Wordpress

這裏是WP查詢

<?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 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('list_teacher', 'list_teacher_shortcode'); 

我不是在這個後端編程非常好的,但我猜想它是與

全球$崗位;

$ schools = $ post-> ID;

我有它列在兩個不同的領域,但我試圖從頂部和從較低的區域中刪除它,仍然得到相同的結果。

回答

1

您使用的是全球$ post;在你的短代碼,它需要在頁面上的最後一個職位,所以你必須在你的簡碼

echo do_shortcode('[list_teacher postID="'.$post->ID.'"]'); 

發帖子的ID,並得到它list_teacher_shortcode函數內。

$a = shortcode_atts(array(
    'postID' => '', 
), $atts); 
$postID = $a['postID']; 

那麼你不需要這個代碼(你使用它的兩倍):

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

UPDATE

您還可以使用$查詢 - > the_post()和wp_reset_post_data()內您的簡碼。這裏更多信息https://codex.wordpress.org/Function_Reference/wp_reset_postdata

更新2全碼

把它放在你想使用簡碼

echo do_shortcode('[list_teacher postID="'.$post->ID.'"]'); 

下面是完整的簡碼的代碼

function list_teacher_shortcode($atts){ 
    $a = shortcode_atts(array(
     'postID' => '', 
    ), $atts); 
    $schools = $a['postID']; 
    $args = array( 
    'post_type' => 'teacher', 
    'meta_query' => array(
     array(
      'key'  => 'areas_of_focus', 
      'value' => $schools, 
      'compare' => 'LIKE', 
     ), 
    ), 
); 
    $schools_data_query = new WP_Query($args); 
    $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('list_teacher', 'list_teacher_shortcode'); 

更新3

另外,您可以使用get_the_ID()描述爲here 然後,您可以從短碼功能刪除屬性和你的函數的第一行應該是這樣的:

$school = get_the_ID(); 
+0

對不起,我有以下的困難時期:/ –

+0

@VinceMamba,我已經添加完整的代碼只爲你:) – MurDaD

+0

謝謝你的幫助,唯一的問題是我把它變成一個短代碼,所以我可以把它放在側邊欄區域的wordpress,但短代碼不接受側邊欄區域的PHP。所以它必須是像[list_teacher] –