web-dev-qa-db-fra.com

Le type de message personnalisé affiche la page d'accueil personnalisée

J'ai un type de message personnalisé configuré (deux, en fait) qui ne s'affichent pas correctement. J'espère que c'est le même problème avec les deux types de poste.

Voici mon code pour l'un des types de post (portfolio). La seconde est assez similaire.

<?php
add_action('init', 'ccd_portfolio');

function ccd_portfolio() {

    $labels = array(
        'name' => _x('Portfolio', 'post type general name'),
        'singular_name' => _x('Project', 'post type singular name'),
        'add_new' => _x('Add New', 'ccd_portfolio item'),
        'add_new_item' => __('Add New Project'),
        'edit_item' => __('Edit Project'),
        'new_item' => __('New Project'),
        'view_item' => __('View Project'),
        'search_items' => __('Search Projects'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => ''
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'menu_icon' => get_stylesheet_directory_uri() . '/images/icons/plugins/portfolio.png',
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title', 'editor', 'excerpt', 'author'),
        'can_export' => true,
        'show_in_menu' => true,
        'has_archive' => true,
        'rewrite' => array('slug' => 'work')
      ); 

    register_post_type( 'portfolio' , $args );
    flush_rewrite_rules();
}

add_action("admin_init", "ccdport_admin_init");

function ccdport_admin_init(){
  add_meta_box("mb_ccdport_details", "Project Details", "ccdport_details", "portfolio", "normal", "high");
  add_meta_box("mb_ccdport_client", "Client", "ccdport_client", "portfolio", "side", "high");
}

add_action( 'admin_enqueue_scripts', 'ccdport_add_datepicker' );
function ccdport_add_datepicker(){
  wp_enqueue_script( 'jquery-ui-datepicker' );
  wp_enqueue_style('jquery-datepicker-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css');
}
function ccdport_details(){
  global $post;
  $custom = get_post_custom($post->ID);
  $preview_url = $custom['preview_url'][0];
  $start_date = $custom['start_date'][0];
  $end_date = $custom['end_date'][0];
?>
  <p><label>Preview URL: <strong>http://</strong>
    <input type="text" size="35" name="preview_url" value="<?php echo $preview_url; ?>" /></p>
  <p><label>Start date:</label>
    <input id="startDate" type="text" size="15" class="DatePicker" name="start_date" value="<?php echo $start_date; ?>" /> &nbsp;
    <label>End date:</label>
    <input id="endDate" type="text" size="15" class="DatePicker" name="end_date" value="<?php echo $end_date; ?>" /></p>
    <script>
      jQuery(document).ready(function() {
        jQuery('input.DatePicker').datepicker({
          dateFormat : 'dd-mm-yyyy'
        });
      });
    </script>
<?php
}

function ccdport_client(){
  global $post;
  $custom = get_post_custom($post->ID);
  $client = $custom['project_client'][0];
  $name = $custom['client_name'][0];
  $args = array(
    'post_type' => 'clients',
    'posts_per_page' => -1,
    'orderby' => 'name',
    'order' => 'ASC'
  );
?>
  <p><label>Client name</label></p>
  <input type="text" name="client_name" value="<?php echo $name; ?>" />
  <p><label>Organisation</label></p>
<?php
  $query = new WP_Query( $args );
  if ( $query->have_posts() ){
    echo '<select name="project_client">';
    while ( $query->have_posts() ){
      $query->the_post();
      $slug = $post->post_name;
      echo '<option value="'.$slug.'" '.selected($slug, $client).'>'.get_the_title().' ('.$slug.')</option>';
    }
    echo '</select>';
  }
  else { echo '<p>There are currently no clients registered</p>'; }
}

add_action('save_post', 'ccdport_save_details');

function ccdport_save_details(){
  global $post;

  update_post_meta($post->ID, "client_name", $_POST["client_name"]);
  update_post_meta($post->ID, "project_client", $_POST["project_client"]);
  update_post_meta($post->ID, "portfolio", $_POST["portfolio"]);
  update_post_meta($post->ID, "preview_url", $_POST["preview_url"]);
}
?>

Chaque type de publication est inclus dans un fichier séparé et appelé à functions.php avec une commande include. Celles-ci apparaissent parfaitement dans la zone d'administration, les publications sont parfaitement sauvegardées, etc. Cependant, les fichiers de thème (archive-portfolio.php et single-portfolio.php) ne se chargent pas. Au lieu de cela, ma page d'accueil personnalisée est affichée.

Je ne sais pas quel serait le problème. J'ai vidé les règles de réécriture avec chaque type de message, et supprimer cela ne fait rien non plus. Ce n'est que récemment que j'ai commencé à utiliser des types de publication personnalisés. Toute aide serait donc extrêmement utile. J'ai parcouru les autres réponses et elles ne semblent pas être utiles dans mon cas. J'ai essayé de réenregistrer mes permaliens, en vain. J'ai essayé de changer 'has_archive' => true en 'has_archive' => 'portfolio', rien. Y a-t-il quelque chose que j'ai raté? Plus que probablement quelque chose de flagrant?

1
Nate

Selon la réponse du PO qui a été ajoutée à sa question, je l'ai séparée à la place. En bref:

... en désactivant et réactivant les plugins, en commentant et en décommentant, mon site fonctionne maintenant comme prévu.

Voici l'élaboration fournie par le PO également:

J'ai quelques types de publication personnalisés dans mon fichier functions.php. Chacun est dans son propre fichier .php pour les rendre plus faciles à gérer et inclus dans functions.php. Cependant, j'ai eu quelques problèmes avec eux, qui ont été résolus. J'avais un espace en haut de la page lorsque j'ai inclus plusieurs fichiers .php. Cela a été résolu il y a peu de temps, mais comme solution temporaire, j'ai encapsulé les pages dans une fonction if (is_admin ()). Je ne savais pas que cela affecterait également les pages de modèle.

1

J'ai eu un problème similaire - ajouté un nouveau type de message personnalisé dont le slug était une ancienne page. Après la suppression définitive de l'ancienne page, mes publications personnalisées et leurs archives ne s'affichaient pas, mais j'ai obtenu la page d'accueil du thème.

La solution consistait à accéder à Paramètres> Permaliens, à le remplacer temporairement par autre chose, à appuyer sur Enregistrer, à rétablir les paramètres d'origine, à appuyer à nouveau sur Enregistrer. Maintenant, le type de message personnalisé fonctionne.

0
DavGarcia