2014-12-06 5 views
0

Я изначально настроил свое меню, чтобы установить категории, но это ограничивает мое использование категорий структурой меню.paginate через категорию в wordpress page.php template

В идеале, что я предпочел бы делать, это использовать шаблоны страниц.

Таким образом, я создаю новый шаблон страницы «page-for-cat.php» и назову страницу шаблона категории.

добавить в запросе к странице

<?php 
query_posts('category_name=my-cat'); 
while (have_posts()) : the_post(); 
the_content(); 
endwhile; 
?> 

Я использовал этот пост в качестве ссылки

Я тогда сделать новую страницу в WordPress и установить шаблон страницы на «странице категории». Я вызываю страницу «Страница тестирования».

Затем я добавляю, что страница Wordpress «тестовая страница» относится к структуре меню.

До сих пор, так хорошо ...

То, что я не могу добраться до работы является разбиением на страницы на предыдущую и следующую страницу, чтобы работать с этим создано.

Где я ошибаюсь, hav, я что-то пропустил?

Благодаря

ответ

0

Вы никогда не должны когда-либо использовать query_posts

Примечание: Эта функция не предназначена для использования плагинов или темы. Как поясняется ниже, есть более эффективные, более эффективные варианты для изменения основного запроса. query_posts() является слишком упрощенным и проблематичным способом изменения основного запроса страницы путем замены его новым экземпляром запроса. Он неэффективен (повторно запускает SQL-запросы), и в некоторых случаях он будет неудачным (особенно часто при работе с разбивкой по страницам).

Это сообщение, которое я недавно сделал на WPSE. Этот шаблон позволяет выбрать из раскрывающегося списка категорию, которую вы хотите отобразить на странице. Хорошо, у вас есть один шаблон для всех страниц, а не один шаблон страницы для каждой категории. Вот эта страница и сообщение с разбивкой на страницы

Из чего я могу понять, что вы специально ищете шаблон страницы , который вы можете установить под атрибутами страницы на странице добавления/редактирования страницы и автоматически назначить категорию Это.

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

Вот как это работает

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

Примечание: Эта функция не предназначена для использования плагинов или темы. Как поясняется ниже, есть более эффективные, более эффективные варианты для изменения основного запроса. query_posts() является слишком упрощенным и проблематичным способом изменения основного запроса страницы путем замены его новым экземпляром запроса. Он неэффективен (повторно запускает SQL-запросы), и в некоторых случаях он будет неудачным (особенно часто при работе с разбивкой по страницам).

Следует отметить, прежде чем начать, вы можете просто создать правильный шаблон category.php, создать пользовательское меню и добавить нужную категорию в меню. Следует также отметить, что вы можете использовать название категории страницы слизняка, но вы не имеют дочерние страницы для этих страниц, это будет мешать и сломать Template Hierarchy

Чтобы выполнить все, что нам нужно, вам нужно создать настраиваемый мета-ящик, который будет добавлен на экран добавления/редактирования страницы, когда выбран конкретный шаблон. Этот мета-поле будет использоваться для выбора категории, которая будет использоваться для выбранной страницы. Вы также сможете установить пользовательские posts_per_page и сортировать сообщения. Вот код для добавления настраиваемого мета-поля. Добавьте этот код в свои функции. Php или любые связанные с ним функции.

<?php 
/**----------------------------------------------------------------------------- 
* 
* Add a post metabox with options to the admin page screen. 
* After selcting the page-pop.php template as a page template, 
* this metabox will appear in the admin page screen. 
* From here you can choose which category's posts to display 
* and how the posts will be displayed on the page 
* 
* @package WordPress 
* @subpackage Twenty_Fourteen 
* @since Twenty Fourteen 1.0 
* 
*------------------------------------------------------------------------------*/ 

/**----------------------------------------------------------------------------- 
* 
* 1. Only add meta boxes for the pop template 
* 
* @since Twenty Fourteen 1.0 
* 
*------------------------------------------------------------------------------*/ 
add_action('admin_init', 'pietergoosen_add_pop_meta_box'); 

function pietergoosen_add_pop_meta_box(){ 
    $post_id = isset($_GET['post']) ? $_GET['post'] : 0 ; 
    if($post_id) { 
     $template_file = get_post_meta($post_id,'_wp_page_template',TRUE); 
     if ($template_file == 'page-pop.php') { 
      add_meta_box('pop_meta_box', __('Page of Posts with the same name', 'pietergoosen'), 'pietergoosen_pop_meta_options', 'page', 'side', 'core'); 
     } else { 
      $meta = get_post_meta($post_id, '_cat_id', true); 
      if($meta) { 
       pietergoosen_pop_update_post_meta($post_id, '_cat_id', ''); 
       pietergoosen_pop_update_post_meta($post_id, '_page_title', ''); 
       pietergoosen_pop_update_post_meta($post_id, '_posts_title', ''); 
       pietergoosen_pop_update_post_meta($post_id, '_order_by', ''); 
       pietergoosen_pop_update_post_meta($post_id, '_asc', ''); 
       pietergoosen_pop_update_post_meta($post_id, '_post_count', ''); 
       pietergoosen_pop_update_post_meta($post_id, '_days', ''); 
       remove_meta_box('pop_meta_box', 'page', 'side'); 
      } 
     } 
    } 
    add_action('save_post', 'pietergoosen_pop_update_post_meta_box'); 
} 

/**----------------------------------------------------------------------------- 
* 
* 2. Built the list to display the options in the metabox 
* 
* @since Twenty Fourteen 1.0 
* 
*------------------------------------------------------------------------------*/ 
$order_list = array(
    'none' => array('value' => 'none','label' => 'None'), 
    'id' => array('value' => 'ID','label' => 'Post ID'), 
    'author' => array('value' => 'author','label' => 'Author'), 
    'title' => array('value' => 'title','label' => 'Post Title'), 
    'date' => array('value' => 'date', 'label' => 'Post Date' ), 
    'modified' => array('value' => 'modified','label' => 'Modified Date'), 
    'parent' => array('value' => 'parent','label' => 'Parent Post'), 
    'rand' => array('value' => 'rand','label' => 'Random'), 
    'comment_count' => array('value' => 'comment_count','label' => 'Comment Count'), 
    'menu_order' => array('value' => 'menu_order','label' => 'Menu Order'), 
); 

$sort = array(
    'DESC' => array('value' => 'DESC','label' => 'Descending'), 
    'ASC' => array('value' => 'ASC','label' => 'Ascending'), 
); 

function pietergoosen_pop_meta_options(){ 

    $post_id = !empty($_GET['post']) ? $_GET['post'] : 0; 
    if(!$post_id) return; 

    $template_file = get_post_meta($post_id,'_wp_page_template',TRUE); 
    if ($template_file != 'page-pop.php') return; 

    global $order_list,$post_styles,$sort; 
    $categories = get_categories(); 

    //Check if we have values 
    $post_meta=array(); 
    $post_meta = get_post_meta($post_id,false); 

    $cat_id = isset($post_meta['_cat_id']) ? $post_meta['_cat_id'][0] : 1; 
    $page_title = isset($post_meta['_page_title']) && $post_meta['_page_title'] ? $post_meta['_page_title'][0] : ''; 
    $posts_title = isset($post_meta['_posts_title']) && $post_meta['_posts_title'] ? $post_meta['_posts_title'][0] : ''; 
    $order_by = isset($post_meta['_order_by']) ? $post_meta['_order_by'][0] : 'date'; 
    $asc = isset($post_meta['_asc']) ? $post_meta['_asc'][0] : 'DESC'; 
    $post_count = isset($post_meta['_post_count']) ? $post_meta['_post_count'][0] : get_option('posts_per_page'); 
    if(!$post_count || !is_numeric($post_count)) $post_count = get_option('posts_per_page'); 
    $days = isset($post_meta['_days']) ? $post_meta['_days'][0] : '0'; 
    if($days && !is_numeric($days)) $days = '0'; 
    ?> 

    <!-- Sart the meta boxes --> 
    <div class="inside"> 
    <p><label><strong><?php _e('Page Title', 'pietergoosen'); ?></strong></label></p> 
    <input id="_posts_title" name="_posts_title" type="text" style="width: 98%;" value="<?php echo $posts_title; ?>"/> 

    <p><label><strong><?php _e('Post Title', 'pietergoosen'); ?></strong></label></p> 
    <input id="_page_title" name="_page_title" type="text" style="width: 98%;" value="<?php echo $page_title; ?>"/> 

    <p><label><strong><?php _e('Category', 'pietergoosen'); ?></strong></label></p> 
    <select id="_cat_id" name="_cat_id"> 
<?php 
    //Category List 
    foreach ($categories as $cat) : 
     $selected = ($cat->cat_ID == $cat_id) ? ' selected = "selected" ' : ''; 
     $option = '<option '.$selected .'value="' . $cat->cat_ID; 
     $option = $option .'">'; 
     $option = $option .$cat->cat_name; 
     $option = $option .'</option>'; 
     echo $option; 
    endforeach; 
?> 
    </select> 

    <p><label><strong><?php _e('Sort by', 'pietergoosen')?></strong></label></p> 
    <select id="_order_by" name="_order_by"> 
<?php 
    foreach ($order_list as $output) : 
     $selected = ($output['value'] == $order_by) ? ' selected = "selected" ' : ''; 
     $option = '<option '.$selected .'value="' . $output['value']; 
     $option = $option .'">'; 
     $option = $option .$output['label']; 
     $option = $option .'</option>'; 
     echo $option; 
    endforeach; 
?> 
    </select>  

    <p><label><strong><?php _e('Order', 'pietergoosen')?><strong></label></p> 
    <select id="_asc" name="_asc"> 
<?php 
    foreach ($sort as $output) : 
     $selected = ($output['value'] == $asc) ? ' selected = "selected" ' : ''; 
     $option = '<option '.$selected .'value="' . $output['value']; 
     $option = $option .'">'; 
     $option = $option .$output['label']; 
     $option = $option .'</option>'; 
     echo $option; 
    endforeach; 
?> 
    </select> 

    <p><strong><label><?php _e('Posts per Page', 'pageofposts'); ?><strong></label></p> 
    <input id="_post_count" name="_post_count" type="text" value="<?php echo $post_count; ?>" size="3" /> 

    <p><strong><label><?php _e('Posts in the last days', 'pageofposts'); ?><strong></label></p> 
    <input id="_days" name="_days" type="text" value="<?php echo $days; ?>" size="3" /> 
    </div> 
    <!-- End page of posts meta box --> 
    <?php 
} 
function pietergoosen_pop_update_post_meta_box($post_id){ 

    if (empty($_POST)) { 
     return; 
    } else { 
     $template_file = get_post_meta($post_id,'_wp_page_template',TRUE); 
     if ($template_file != 'page-pop.php') return; 

     if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { 
      return $post_id; 
     } else { 
      if ($_POST['post_type'] == 'page') { 
       if (!current_user_can('edit_page', $post_id)) 
        return $post_id; 
      } else { 
       if (!current_user_can('edit_post', $post_id)) 
        return $post_id; 
      } 
      $meta = isset($_POST['_cat_id']) ? $_POST['_cat_id'] : 1;   
      pietergoosen_pop_update_post_meta($post_id, '_cat_id', $meta); 
      $meta = isset($_POST['_page_title']) ? $_POST['_page_title'] : '';    
      pietergoosen_pop_update_post_meta($post_id, '_page_title', $meta); 
      $meta = isset($_POST['_posts_title']) ? $_POST['_posts_title'] : '';   
      pietergoosen_pop_update_post_meta($post_id, '_posts_title', $meta); 
      $meta = isset($_POST['_order_by']) ? $_POST['_order_by'] : 'date';    
      pietergoosen_pop_update_post_meta($post_id, '_order_by', $meta); 
      $meta = isset($_POST['_asc']) ? $_POST['_asc'] : 'DESC'; 
      pietergoosen_pop_update_post_meta($post_id, '_asc', $meta); 
      $meta = isset($_POST['_post_count']) ? $_POST['_post_count'] : get_option('posts_per_page'); 
      pietergoosen_pop_update_post_meta($post_id, '_post_count', $meta); 
      $meta = isset($_POST['_days']) ? $_POST['_days'] : 0; 
      pietergoosen_pop_update_post_meta($post_id, '_days', $meta); 
      return; 
     } 
    } 
} 

function pietergoosen_pop_update_post_meta($post_id, $key, $data) { 
    $post_meta = get_post_meta($post_id, $key, true); 
    if($data != '' && $post_meta != $data) { 
     update_post_meta($post_id, $key, $data); 
    } elseif ($post_meta != '' && $data == '') { 
     delete_post_meta($post_id, $key); 
    } 
} 
?> 

Теперь для шаблона страницы. Создайте файл в корневом каталоге и назовите его page-pop.php. Вы должны вызвать свой шаблон. Если вам нужно переименовать его, проверьте приведенный выше код и измените все экземпляры page-pop.php на имя шаблона по вашему выбору.

Первый раздел перезвонит все сохраненные значения из мета-поля. Эти значения будут возвращены в ваш пользовательский номер WP_Query, чтобы перезвонить все сообщения в соответствии с категорией.

Первый цикл - это ваш обычный шаблон шаблона страницы, который вы можете использовать для отображения контента, добавленного в редактор WYSIWYG на экране добавления/редактирования страницы. Второй цикл/запрос - это запрос, который будет возвращать ваши сообщения. Вы должны отметить, что вся разметка здесь для темы двадцать четыре года по умолчанию, вам нужно будет изменить ее, чтобы добавить свою тему.

Вот код, который должен идти в свой page-pop.php шаблон

<?php 
/** 
* Template Name: Page of Posts 
*/ 
get_header(); ?> 

<?php 
    //See if we have any values 
    $post_meta   = array(); 
    $post_meta   = get_post_meta($post->ID,false); 
    $catid    = isset($post_meta['_cat_id']) ? $post_meta['_cat_id'][0] : 1; 
    $page_title   = isset($post_meta['_page_title']) ? $post_meta['_page_title'][0] : ''; 
    $posts_title  = isset($post_meta['_posts_title']) ? $post_meta['_posts_title'][0] : ''; 
    $orderby   = isset($post_meta['_order_by']) ? $post_meta['_order_by'][0] : 'date'; 
    $asc    = isset($post_meta['_asc']) ? $post_meta['_asc'][0] : 'DESC'; 
    $list_style   = isset($post_meta['_list_style']) ? $post_meta['_list_style'][0] : 'default'; 
    $post_count   = isset($post_meta['_post_count']) ? $post_meta['_post_count'][0] : get_option('posts_per_page'); 

    if(!$post_count || !is_numeric($post_count)) 
     $post_count = get_option('posts_per_page'); 
    $days = isset($post_meta['_days']) ? $post_meta['_days'][0] : 0; 
    if($days && !is_numeric($days)) 
     $days = 0; 
    $do_not_show_stickies = ($list_style == 'default') ? 0 : 1; 
?> 

<div id="main-content" class="main-content"> 

    <div id="primary" class="content-area"> 
     <div id="content" class="site-content" role="main"> 

    <!-- Page Title --> 
    <?php if($posts_title) : ?> 
     <article id="posts-title"> 
      <header class="entry-header"> 
       <h2 class="entry-title"><?php echo $posts_title; ?></h2> 
      </header><!-- .entry-header --> 
     </article><!-- #posts-title --> 
    <?php endif; ?> 

     <?php the_post(); ?> 
     <?php global $post; 
     if($post->post_content || $page_title) : ?> 
     <div class="entry-content"> 
      <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> 
       <?php if($page_title) : ?> 
        <header class="entry-header"> 
         <h1 class="entry-title"><?php echo $page_title; ?></h1> 
        </header><!-- .entry-header --> 

       <?php endif; ?> 
      <?php if($post->post_content) : ?>  
       <div class="entry-content"> 
        <?php the_content(); ?> 
        <?php wp_link_pages(array('before' => '<div class="page-link"><span>' . __('Pages:', 'pietergoosen') . '</span>', 'after' => '</div>')); ?> 
       </div><!-- .entry-content --> 
       <footer class="entry-meta"> 

       </footer><!-- .entry-meta --> 
      <?php endif; ?> 
      </article><!-- #post-<?php the_ID(); ?> --> 
     </div> 
     <?php endif; ?> 

<?php 

/**----------------------------------------------------------------------------- 
* 
* Start our custom query to display category posts 
* 
*------------------------------------------------------------------------------*/ 
     $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
     $args = array( 
      'cat'     => $catid, 
      'posts_per_page'  => $post_count, 
      'paged'     => $paged, 
      'orderby'    => $orderby, 
      'order'     => $asc, 
      'ignore_sticky_posts' => $do_not_show_stickies, 
     ); 

     if($days) { 
      function pop_filter_where($where = '') { 
       global $days; 
        $where .= " AND post_date > '" . date('Y-m-d', strtotime('-' .$days .' days')) . "'"; 
       return $where; 
      } 
      add_filter('posts_where', 'pop_filter_where'); 

      $cat_query = new WP_Query($args); 
      remove_filter('posts_where', 'pop_filter_where'); 

     } else { 

      $cat_query = new WP_Query($args); 

     }   
     // Output 
     if ($cat_query->have_posts()) : 

      $counter = 1; //Starts counter for post column lay out 

      // Start the Loop. 
      while ($cat_query->have_posts()) : $cat_query->the_post(); ?> 

       <div class="entry-column<?php echo ($counter%2 ? ' left' : ' right'); ?>"> 

        <?php get_template_part('content', get_post_format()); ?> 

       </div> 

       <?php 

       $counter++; //Update the counter 

      endwhile; 

       // next_posts_link() usage with max_num_pages 
       next_posts_link('Older Entries', $cat_query->max_num_pages); 
       previous_posts_link('Newer Entries'); 

       wp_reset_postdata(); 

      else : 

       get_template_part('content', 'none'); 

     endif; ?> 

    </div><!-- #content --> 
    </div><!-- #primary --> 

    <?php get_sidebar('content'); ?> 

</div><!-- #main-content --> 

<?php 
get_footer(); 

Я надеюсь, что я правильно вас понял, и надеюсь, что это то, что вам нужно

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