J'essaie de créer un type d'article personnalisé avec taxonomie et un shortcode pour ma recherche personnalisée dans un plugin. Lorsque j'active mon plugin, je vois mon CPT et ma taxonomie sur le tableau de bord. Mais lorsque je publie l'article, je ne vois pas les données sous la forme de la page unique- {CPT} .php que j'ai créée. Au lieu de cela, il affiche la liste de toutes les publications de mon CPT. Les fichiers pertinents sont comme ci-dessous.
index.php (ma page de plugin)
function register_vfic_post_type() {
/* ----Begin Code to include Custom Post Types and its Taxonomies----- */
register_post_type('vfic_publications', array( 'label' => 'VFIC Publications','description' => '','public' => true,'show_ui' => true,'show_in_menu' => true,'capability_type' => 'post','hierarchical' => false,'rewrite' => array('slug' => ''),'query_var' => true,'exclude_from_search' => false,'supports' => array('title','editor','excerpt','revisions','author','page-attributes',),'labels' => array (
'name' => 'VFIC Publications',
'singular_name' => '',
'menu_name' => 'VFIC Publications',
'add_new' => 'Add VFIC Publications',
'add_new_item' => 'Add New VFIC Publications',
'edit' => 'Edit',
'edit_item' => 'Edit VFIC Publications',
'new_item' => 'New VFIC Publications',
'view' => 'View VFIC Publications',
'view_item' => 'View VFIC Publications',
'search_items' => 'Search VFIC Publications',
'not_found' => 'No VFIC Publications Found',
'not_found_in_trash' => 'No VFIC Publications Found in Trash',
'parent' => 'Parent VFIC Publications',
),) );
flush_rewrite_rules();
}
add_action( 'init', 'register_vfic_post_type' );
register_taxonomy('Year',array (
0 => 'vfic_publications',
),array( 'hierarchical' => false, 'label' => 'Year','show_ui' => true,'query_var' => true,'rewrite' => false,'singular_label' => 'Year') );
register_taxonomy('PubsAuthor',array (
0 => 'vfic_publications',
),array( 'hierarchical' => false, 'label' => 'PubsAuthor','show_ui' => true,'query_var' => true,'rewrite' => false,'singular_label' => 'PubsAuthor') );
register_taxonomy('Journal',array (
0 => 'vfic_publications',
),array( 'hierarchical' => false, 'label' => 'Journal','show_ui' => true,'query_var' => true,'rewrite' => false,'singular_label' => 'Journal') );
register_taxonomy('nts',array (
0 => 'vfic_publications',
),array( 'hierarchical' => false, 'label' => 'Non-Technical Summary','show_ui' => true,'query_var' => true,'rewrite' => false,'singular_label' => 'nts') );
function vfic_ctg_rewrite_flush() {
register_vfic_post_type();
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'vfic_ctg_rewrite_flush' );
/* ----END Code to include Custom Post Types and its Taxonomies----- */
function vfic_pubs_forms_shortcode() { ?>
<div class="pub-search-form">
<form role="search" method="get" id="searchform" action="<?php echo esc_url( home_url( '/' ) ); ?>">
<p>Keyword(s): <input type="text" class="field" name="s" value="" id="s" class="s" />
<input type="checkbox" name="abstract" value=""/>Just Search Abstract</p>
<p>Author(s):    <?php $myterms = get_terms(array('PubsAuthor'), array('order'=>'ASC','hide_empty'=>true));
$author = "pubsauthors";
$emptyvalue = "";
$text = "text";
$term_taxonomy=$term->PubsAuthor;
$term_slug=$term->slug;
$term_name =$term->name;
$link = $term_slug;
$output .="<input type='".$text."' name='".$link."'/>";
echo $output; ?>
<?php $myterms = get_terms(array('PubsAuthor'), array('order'=>'ASC','hide_empty'=>true));
$author = "pubsauthor";
$emptyvalue = "";
$output ="<select name='".$author."'><option selected='".$selected."' value='".$emptyvalue."'>--Select Authors--</option>'";
foreach($myterms as $term){
$term_taxonomy=$term->PubsAuthor;
$term_slug=$term->slug;
$term_name =$term->name;
$link = $term_slug;
$output .="<option name='".$link."' value='".$link."'>".$term_name."</option>";
}
$output .="</select>";
echo $output;
?></p>
<p>Year:            
<?php $myterms = get_terms(array('Year'), array('order'=>'ASC','hide_empty'=>true));
$year = "pubsyear";
$emptyvalue = "";
$output ="<select name='".$year."'><option selected='".$selected."' value='".$emptyvalue."'>--Select Year--</option>'";
foreach($myterms as $term){
$term_taxonomy=$term->Year;
$term_slug=$term->slug;
$term_name =$term->name;
$link = $term_slug;
$output .="<option name='".$link."' value='".$link."'>".$term_name."</option>";
}
$output .="</select>";
echo $output;
?></p>
<input type="hidden" name="post_type" value="vfic_publications" />
<input type="submit" id="submit" value="Search" />
</form>
</div>
<?php } ?>
<?php add_shortcode('vfic_pubs_search', 'vfic_pubs_forms_shortcode');
add_filter( "template_redirect", "get_custom_post_type_template" ) ;?>
<?php function get_custom_post_type_template($template_redirect) {
global $post;
if ($post->post_type == 'vfic_publications') {
$template_redirect = get_template_part('loop','vfic_publications');
}
return $template_redirect;
} ?>
loop- {type de message personnalisé} .php page
get_header(); ?>
<?php
global $query_string;
$query_args = explode("&", $query_string);
$search_query = array();
foreach($query_args as $key => $string) {
$query_split = explode("=", $string);
$search_query[$query_split[0]] = urldecode($query_split[1]);
} // foreach
$search = new WP_Query($search_query);
$author = $_GET['pubsauthor'];
$abstract = $_GET['abstract'];
$tax_query = array('relation' => 'OR');
if ($_GET['pubsauthor'])
{
$tax_query[] = array(
'taxonomy' => 'PubsAuthor',
'field' => 'slug',
'terms' => array($_GET['pubsauthor'])
);
}
if ($_GET['pubsyear'])
{
$tax_query[] = array(
'taxonomy' => 'Year',
'field' => 'slug',
'terms' => array($_GET['pubsyear'])
);
}
$query = new WP_Query(
array(
//Retreive ALL publications posts
'post_type' => 'vfic_publications',
'posts_per_page' => '-1',
'tax_query' => $tax_query
)
);
?>
<div id="wrap">
<div id="content" role="main">
<?php if ( $query->have_posts() ) : ?>
<p><h2>Your search returned<?php /* Search Count */ $allsearch = &new WP_Query(array(
//Retreive ALL publications posts
'post_type' => 'vfic_publications',
'posts_per_page' => '-1',
'tax_query' => $tax_query
)); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; _e(''); _e('<span class="search-terms">'); echo $key; _e('</span>'); _e(' — '); echo $count . ' '; _e('result(s)'); wp_reset_query(); ?></h2><br/>
<i>Please contact individual journals to obtain a full copy of the publication.</i><hr /><hr /></p>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'agriflex' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2><br/><hr />
<?php endwhile; // End the loop. Whew. ?>
<?php elseif ( have_posts() ) : ?>
<h1 class="page-title">....<?php printf( __( 'Search %s', 'agriflex' ), '<span>' . get_search_query() . '</span>' ); ?></h1>
<?php
/* Run the loop for the search to output the results.
* If you want to overload this in a child theme then include a file
* called loop-search.php and that will be used instead.
*/
get_template_part( 'loop', 'search' );
?>
<?php else : ?>
<div id="post-0" class="post no-results not-found">
<h2 class="entry-title"><?php _e( 'Nothing Found', 'agriflex' ); ?></h2>
<div class="entry-content">
<p><?php _e( 'Sorry, but nothing matched your search criteria. Please try again with some different keywords.', 'agriflex' ); ?></p>
<?php get_search_form(); ?>
</div><!-- .entry-content -->
</div><!-- #post-0 -->
<?php endif; ?>
</div><!-- #content -->
</div><!-- #wrap -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Toute aide à cet égard est vraiment appréciée.
Vous devez renommer loop-{custom-post-type}.php
en single-{custom-post-type}.php
.
Et pour être explicite, le nom de fichier actuel , basé sur votre code ci-dessus, devrait être:
single-vfic_publications.php
.
Débarrassez-vous de tout autre modèle de redirections ou de tout autre élément similaire que vous utilisez. Selon la hiérarchie de modèles , si vous avez un type de message personnalisé nommé vfic_publications
et un fichier modèle nommé single-vfic_publications.php
, WordPress l'utilisera automatiquement pour rendre le -post vue pour ce CPT.
L’autre problème qui se pose ici est que vous semblez essayer d’utiliser la page de vue unique comme page d’index d’archive . . Tu n'as pas besoin de faire ça. Au lieu de cela, créez un fichier archive-vfic_publications.php
et WordPress l'utilisera automatiquement pour afficher la vue de page archive-index pour votre CPT.
Vous semblez également faire des requêtes fiscales dans votre fichier de modèle. Vous voudrez peut-être envisager d'utiliser plutôt les fichiers de modèle de taxonomie à cette fin.
Vous utilisez le code suivant:
add_filter( "template_redirect", "get_custom_post_type_template" ) ;?>
<?php function get_custom_post_type_template($template_redirect) {
global $post;
if ($post->post_type == 'vfic_publications') {
$template_redirect = get_template_part('loop','vfic_publications');
}
return $template_redirect;
} ?>
Mais on ne sait pas pourquoi vous feriez une telle chose. Si vous essayez de charger loop-vfic_publications.php, get_template_part ne fonctionnera que si le fichier est dans le thème.
Si c'est dans le thème, cette fonction est un gaspillage, et vous devriez utiliser le fichier single-vfic_publications.php
à la place avec un get_template_part()
pour inclure le fichier de boucle.
La fonction get_template_part
est utilisée pour inclure un fichier modèle, sans renvoyer le chemin du fichier, ce qui est attendu.
Je voudrais changer votre ligne:
$template_redirect = get_template_part('loop','vfic_publications');
à
$templates = array( 'loop-vfic_publications.php', 'loop.php' );
$template_redirect = locate_template( $templates, false, false );