2016-05-09 113 views
1

因此,我正在爲客戶端開發一個網站,其中的主頁像一個頁面的滾動程序一樣構建,但我還需要在單個主頁之外的其他頁面的功能。我爲這些部分構建了自定義帖子類型,並使用此代碼在主頁上顯示它們。顯示來自自定義帖子類型和頁面模板的內容

<?php query_posts(array('post_type'=>'homepage', 'posts_per_page' => 1000, 'orderby' => 'menu_order', 'order' => 'ASC')); ?> 
<?php if(have_posts()): while(have_posts()): the_post(); ?> 

    <?php 
     global $post; 
     $slug = $post->post_name; 
     locate_template(
      array(
       "template-$slug.php", 
       'template-main.php' 
      ), true 
     ); 
    ?> 
<?php endwhile; endif; ?> 

所以,你可以看到,這是自動拉內容,並使用基於崗位塞頁面模板顯示出來,但是,我需要讓我的客戶端基礎上選擇了一個頁面模板顯示內容一個下拉菜單,我用這段代碼創建了一個顯示頁面模板的下拉式UI。

add_action('add_meta_boxes', 'add_custom_page_attributes_meta_box'); 
function add_custom_page_attributes_meta_box(){ 
global $post; 
    if ('page' != $post->post_type && post_type_supports($post->post_type, 'page-attributes')) { 
     add_meta_box('custompageparentdiv', __('Template'), 'custom_page_attributes_meta_box', NULL, 'side', 'core'); 
    } 
} 

function custom_page_attributes_meta_box($post) { 
    $template = get_post_meta($post->ID, '_wp_page_template', 1); ?> 
    <select name="page_template" id="page_template"> 
     <?php $default_title = apply_filters('default_page_template_title', __('Default Template'), 'meta-box'); ?> 
     <option value="default"><?php echo esc_html($default_title); ?></option> 
     <?php page_template_dropdown($template); ?> 
    </select><?php 
} 

add_action('save_post', 'save_custom_page_attributes_meta_box'); 
function save_custom_page_attributes_meta_box($post_id) { 
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return; 
    if (isset($_POST['post_type']) && 'page' == $_POST['post_type']) return; 
    if (! current_user_can('edit_post', $post_id)) return; 
    if (! empty($_POST['page_template']) && get_post_type($post_id) != 'page') { 
     update_post_meta($post_id, '_wp_page_template', $_POST['page_template']); 
    } 
} 

因此,我現在面臨的問題是如何根據所選頁面模板在我的主頁中顯示所有自定義帖子。

非常感謝! J

+0

所以基本上你只是想知道如何在主要博客頁面上顯示自定義帖子,爲您提供主頁? –

+0

不,我需要知道如何根據模板選擇器製作自定義帖子類型顯示內容。現在,這會將所有內容拉入主頁面,但內容會根據由slug確定的頁面模板顯示。我寧願我的客戶端能夠選擇它如何從模板選擇器顯示。 –

回答

1

WordPress的實際上只使用_wp_page_template元字段的頁面類型的職位。如果您想更改模板,則可以使用過濾器single template。有一件事我會建議就是你把你在你的主題/插件,使用這種好票據....

BTW更新cpt到您的文章類型

function load_cpt_template($single_template) { 
    global $post; 

    if ($post->post_type == 'cpt') { 

      $new_template = get_post_meta($post->ID, '_wp_page_template', true); 

      // if a blank field or not valid do nothing, load default.. 
      if(is_file($new_template)) 
      $single_template = $new_template; 
    } 
    return $single_template; 
} 
add_filter('single_template', 'load_cpt_template'); 
+0

我應該用代碼替換整個代碼中的循環還是直接從'global $ post'開始? –

+0

沒有放在你的函數文件中,它不是循環的一部分,它會在你的自定義文章類型中尋找元值_wp_page_template,並加載模板而不是普通的進程。 – David

+0

謝謝。我的下一個問題就是如何將所有帖子放在一起,並使用他們的頁面模板將它們顯示在頁面中。任何想法在這方面? –

相關問題