2017-10-19 15 views
0

Avant de commencer, je dois dire que ma connaissance de PHP est très petite mais j'ai essayé de le relever et de l'apprendre au cours des dernières semaines.Comment créer une page AJAX Custom Post Type Archive avec une recherche sur Wordpress

Je suis tirais mon visage pendant des jours en essayant d'obtenir des fonctionnalités de travail sur un type post personnalisé dans Wordpress ...

J'ai créé un MU-Plugin et enregistrée à la fois une catégorie « lignes directrices » et taxonomie "sujet" qui fonctionne vraiment bien dans le back-end et je suis en mesure d'ajouter des informations, mais je n'ai pas été en mesure d'obtenir des fonctionnalités de recherche ou de publier des clics sur le front-end.

C'est ce que j'ai créé en HTML/CSS et je suis après:

The basics are here, but the functionality is not... The search doesn't work at all and clicking on the subject headers take me to "single.php"

J'ai cherché dans un certain nombre de forums et les suivis de près, mais n'ont pas réussi à trouver quelque chose à travailler le comme j'en ai besoin.

Voici ce que j'ai jusqu'à présent (Désolé si c'est désordonné, j'ai passé les derniers jours à copier de nombreux tutoriels différents, donc peut-être Frankenstein'd le code).

/wp-content/mu-plugins/member-zone.php:

<?php 

/** 
* Plugin Name: BAKS9's plugin 
* Description: Creates the Member-Zone 
* Author: BAKS9 
* Version: 1.0 
*/ 
add_action('init', 'add_guidelines'); 

function add_guidelines() { 
    register_post_type('guidelines', 
     array(
      'labels' => array(
       'name' => 'Member Zone', 
       'singular_name' => 'Guideline', 
       'add_new' => 'Add New', 
       'add_new_item' => 'Add New Guideline', 
       'edit' => 'Edit', 
       'edit_item' => 'Edit Guideline', 
       'new_item' => 'New Guideline', 
       'view' => 'View', 
       'view_item' => 'View Guidelines', 
       'search_items' => 'Search Guidelines', 
       'not_found' => 'No Guidelines found', 
       'not_found_in_trash' => 'No Guidelines found in Trash', 
       'parent' => 'Parent Guidelines', 
       'exclude_from_search' => false, 
       'pre_get_posts' => false, 
       'hierarchical' => true 
      ), 
      'public' => true, 
      'menu_position' => 15, 
      'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'), 
      'taxonomies' => array('subject'), 
      'menu_icon' => plugins_url('images/Members.png', __FILE__), 
      'has_archive' => true 
     ) 
    ); 
} 

add_action('init', 'subject_taxonomy', 0); 

function subject_taxonomy() { 
    register_taxonomy(
     'subject', 
     'guidelines', 
     array(
      'labels' => array(
       'name' => 'Subject', 
       'add_new_item' => 'Add new subject', 
       'new_item_name' => "New subject", 
       'rewrite' => array('slug' => 'subject') 
      ), 
      'show_ui' => true, 
      'show_tagcloud' => false, 
      'hierarchical' => true, 
      'show_admin_column' => true 
     ) 
    ); 
} 

/* 
* Template 
*/ 

function include_template_function($template_path) { 
    if (get_post_type() == 'guidelines') { 
     if (is_archive()) { 
      if ($theme_file = locate_template(array ('archive-guidelines.php'))) { 
       $template_path = $theme_file; 
      } else { $template_path = plugin_dir_path(__FILE__) . '/archive-guidelines.php'; 

      } 
     } 
    } 
    return $template_path; 
} 

// Add the custom columns to the subject post type: 
add_filter('manage_guidelines_posts_columns', 'set_custom_edit_guidelines_columns'); 
function set_custom_edit_guidelines_columns($columns) { 
    $columns['subject'] = __('Subject', 'http://www.MYWEBSITE.com'); 

    return $columns; 
} 

// Add the data to the custom columns for the book post type: 
add_action('manage_guidelines_posts_custom_column' , 'custom_guidelines_column', 10, 2); 
function custom_guidelines_column($column, $post_id) { 
    switch ($column) { 

     case 'subject' : 
      $terms = get_the_term_list($post_id , 'subject' , '' , ', ' , ''); 
      if (is_string($terms)) 
       echo $terms; 
      else 
       _e('Unable to get subject(s)', 'http://www.MYWEBSITE.com'); 
      break; 

    } 
} 

function filter_subject_by_taxonomies($post_type, $which) { 

    // Apply this only on a specific post type 
    if ('guidelines' !== $post_type) 
     return; 

    // A list of taxonomy slugs to filter by 
    $taxonomies = array('subject'); 

    foreach ($taxonomies as $taxonomy_slug) { 

     // Retrieve taxonomy data 
     $taxonomy_obj = get_taxonomy($taxonomy_slug); 
     $taxonomy_name = $taxonomy_obj->labels->name; 

     // Retrieve taxonomy terms 
     $terms = get_terms($taxonomy_slug); 

     // Display filter HTML 
     echo "<select name='{$taxonomy_slug}' id='{$taxonomy_slug}' class='postform'>"; 
     echo '<option value="">' . sprintf(esc_html__('Show All %s', 'text_domain'), $taxonomy_name) . '</option>'; 
     foreach ($terms as $term) { 
      printf(
       '<option value="%1$s" %2$s>%3$s (%4$s)</option>', 
       $term->slug, 
       ((isset($_GET[$taxonomy_slug]) && ($_GET[$taxonomy_slug] == $term->slug)) ? ' selected="selected"' : ''), 
       $term->name, 
       $term->count 
      ); 
     } 
     echo '</select>'; 
    } 

} 
add_action('restrict_manage_posts', 'filter_subject_by_taxonomies' , 10, 2); 

?> 

/wp-content/themes/child/archives-guidelines.php:

<?php get_header(); ?> 

<div id="main-content"> 
    <div class="container"> 
     <div id="content-area" class="clearfix"> 
      <div id="left-area"> 

<table style="overflow: hidden;" height="300px"> 
    <tbody> 
<tr> 
    <td class="Members_Left_Bar"><input role="search" id="search-container form" class="Members_Left_Search" type="search" placeholder="Search"><button type="submit" id="search-container form" class="Members_Left_Search_Icon"><i class="fa fa-search"></i></button></td> 
    <th style="background-color: grey; color: white;"><a class="TitleSeperator" style="color: white;" href="#<?php echo the_ID ?>"><?php echo get_the_title(); ?></a></th> 
    </tr> 
    <tr> 
     <td style="vertical-align: top;"> 
     <?php echo listsubjects() ?> 
     </td> 
     <td><br /><a name="<?php echo the_ID?>"></a><h2><?php echo get_the_title(); ?></h2><br /><?php echo the_content(); ?></td> 
</tr> 
    </tbody> 
</table> 

<?php 
function listsubjects() { 
    $taxonomy = 'subject'; 
    $args=array(
     'orderby' => 'menu_order', 
       'show_count' => 0, 
       'pad_counts' => 0, 
       'hierarchical' => 1, 
       'taxonomy' => $tax, 
       'title_li' => '', 
       'include'=> array() 
     ); 

    $terms = get_terms('subject',$args); 
    echo '<ul class="subject_list">'; 

    foreach ($terms as $term) { 
     $term_link = get_term_link($term, 'subject'); 
     if(is_wp_error($term_link)) 
      continue; 

     echo '<li class="subject_list_item"><a href="' . $term_link . '">' . $term->name . '</a></li>'; 
    } 
    echo '</ul>'; 
} 

      if (have_posts()) : 
       while (have_posts()) : the_post(); 
        $post_format = et_pb_post_format(); ?> 

        <article style="display: none;" id="post-<?php the_ID(); ?>" <?php post_class('et_pb_post'); ?>> 

       <?php 

        $thumb = ''; 

        $width = (int) apply_filters('et_pb_index_blog_image_width', 1080); 

        $height = (int) apply_filters('et_pb_index_blog_image_height', 675); 
        $classtext = 'et_pb_post_main_image'; 
        $titletext = get_the_title(); 
        $thumbnail = get_thumbnail($width, $height, $classtext, $titletext, $titletext, false, 'Blogimage'); 
        $thumb = $thumbnail["thumb"]; 

        et_divi_post_format_content(); 

        if (! in_array($post_format, array('link', 'audio', 'quote'))) { 
         if ('video' === $post_format && false !== ($first_video = et_get_first_video())) : 
          printf(
           '<div class="et_main_video_container"> 
            %1$s 
           </div>', 
           $first_video 
          ); 
         elseif (! in_array($post_format, array('gallery')) && 'on' === et_get_option('divi_thumbnails_index', 'on') && '' !== $thumb) : ?> 
          <a href="<?php the_permalink(); ?>"> 
           <?php print_thumbnail($thumb, $thumbnail["use_timthumb"], $titletext, $width, $height); ?> 
          </a> 
        <?php 
         elseif ('gallery' === $post_format) : 
          et_pb_gallery_images(); 
         endif; 
        } ?> 

       <?php if (! in_array($post_format, array('link', 'audio', 'quote'))) : ?> 
        <?php if (! in_array($post_format, array('link', 'audio'))) : ?> 
         <h2 class="entry-title"><a href="<?php the_permalink(); ?>"><?php relevanssi_the_title(); ?></a></h2> 
        <?php endif; ?> 

        <?php 
         et_divi_post_meta(); 

         if ('on' !== et_get_option('divi_blog_style', 'false') || (is_search() && ('on' === get_post_meta(get_the_ID(), '_et_pb_use_builder', true)))) { 
          truncate_post(270); 
         } else { 
          the_content(); 
         } 
        ?> 
       <?php endif; ?> 

        </article> <!-- .et_pb_post --> 
      <?php 
        endwhile; 

        if (function_exists('wp_pagenavi')) 
         wp_pagenavi(); 
        else 
         get_template_part('includes/navigation', 'index'); 
       else : 
        get_template_part('includes/no-results', 'index'); 
       endif; 
      ?> 
      </div> <!-- #left-area --> 
     </div> <!-- #content-area --> 
    </div> <!-- .container --> 
</div> <!-- #main-content --> 

<?php get_footer(); ?> 

J'ai copié et collé le fichier 'Archive.php' à partir de Divi, et j'ai caché les éléments Divi sur la page que j'essaie de rassembler.

J'ai essayé de créer une recherche avec la taxonomie « sujet », mais même alors, il ne tire aucun résultat de la taxonomie correcte, donc avant que je puisse obtenir que pour travailler, j'ai besoin pour travailler AJAX ...

Je suis conscient que j'ai besoin d'un fichier. Js mais même alors, je n'ai pas de chance.

Je comprends cela est probablement beaucoup plus déroutant pour moi que ce devrait être, je l'espère vraiment que quelqu'un peut me proposer un peu d'orientation ou de me dire de recommencer ...

Je dois aussi faire en sorte Je posterai le sujet et la catégorie titre et le contenu correctement que je ne peux pas sembler clouer que peu soit ...

Répondre

0

C'est un début:

  1. Vous modèle d'archives sont archive-<post_type>.php à suivre WordPress de hiérarchie de modèle.
  2. Votre type de poste devrait être singulier, vous devez vous inscrire guideline
  3. Cela rendrait l'archive archive-guideline.php
  4. Chaque fois que vous exécutez plus des fonctions WP the_, par exemple the_title(), the_content(), ou the_permalink(), le comportement par défaut est echo, donc chaque fois que vous faites echo the_ID(), c'est redondant: il fait déjà écho.Vous devez soit exécuter the_ID() ou echo get_the_ID()
+0

Ah merci - Un pas de plus vers le code plus clair ...! – Brett

+0

Ne vous inquiétez pas - WordPress a les normes de codage les plus archaïques de tous les temps. Vous devriez vérifier http://www.roots.io - C'est une bonne communauté qui "traîne WordPress en 2017" – plushyObject

+0

Je regarde dans votre code pour essayer d'aider plus. – plushyObject