I have a problem with custom post types (Quiz) and WordPress searches. Custom post types do not appear on my search results page. Only text content is displayed by default in my search results.
Below are the codes I used
functions.php function create_posttype () {
register_post_type( 'compassquiz',
array(
'labels' => array(
'name' => __( 'Compass Quiz' ),
'singular_name' => __( 'Compass Quiz' )
),
'taxonomies' => array('post_tag'),
'public' => true,
'publicly_queryable' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'free-quiz-bank-exam'),
'query_var' => true,
'exclude_from_search' => false,
)
);}
add_action( 'init', 'create_posttype' );
Additional code in functions.php
function filter_search($query) {
if ($query->is_search) {
$query->set('post_type', array('post', 'compassquiz'));
};
return $query;
};
add_filter('pre_get_posts', 'filter_search');
search.php
<?php
if ( have_posts() ) : ?>
<header class="page-header">
<h1 class="page-title">
<?php printf( esc_html__( 'Search Results for: %s', 'compass' ), '<span>' . get_search_query() . '</span>' ); ?>
</h1>
</header>
<?php
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/content', 'search' );
endwhile;
the_posts_navigation();
else :
get_template_part( 'template-parts/content', 'none' );
endif;
?>
content-search.php
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<?php the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' ); ?>
</header>
<div class="entry-summary">
<?php
echo substr(get_the_excerpt(), 0,150) . '...';
echo ('<br><a href="' .get_permalink() . '" class="moretag">Read More »</a>');
?>
</div>
</article>
I tried a lot of code found in WP Fourm, as well as other stackoverflow issues. But could not find a solution that really works.