wppizza / markup / search / search.php

Display wppizza menu items in search results keeping prices and other relevant WPPizza menu item information intact to work with your theme

Only really used/needed if using WPPizza search widget with wppizza menu items enabled or equivalent shortcode

NOTE: although the following would work the same way with your normal/main theme the below assumes you are using a child theme. If you are not using a child theme, now would be a good time to create one to allow you to update your main theme when an update becomes available without loosing any of your changes or additions you make now or in the future. If you do not know how to create a child theme or why to use one, please refer to the wordpress codex here.

 

How to:

  • create the following directory structure in your child theme: wppizza/markup/search so your whole structure will look something like this /[path]/[to]/[my]/[child-theme]/wppizza/markup/search
  • locate the search.php file in your theme directory and copy it to the above created directory so the file structure will now look like this /[path]/[to]/[my]/[child-theme]/wppizza/markup/search/search.php
    NOTE: Some themes do not provide a search.php file. I would suggest you ask the theme developer to create/add one or ask him/her which template part is responsible for displaying search results.
    Unfortunately, I will not be able to help you with your particular theme if this is the case.
  • open this “search.php” file in a suitable text editor
  • typically you will find something like
    while ( have_posts() ) : the_post();
    	get_template_part( 'template-parts/content', 'search' );
    endwhile;
  • REPLACE
    get_template_part( 'template-parts/content', 'search' );

    with

    if(function_exists('wppizza_search_results_get_template_part')){
    	wppizza_search_results_get_template_part('template-parts/content', 'search' );
    }else{
    	get_template_part( 'template-parts/content', 'search' );
    }

    leaving any codeblocks before and after intact and save

  • the whole file will now be similar to this
    <?php
    get_header(); ?>
    
    	<section id="primary" class="content-area">
    		<main id="main" class="site-main" role="main">
    
    		<?php if ( have_posts() ) : ?>
    
    			<header class="page-header">
    				<h1 class="page-title"><?php printf( __( 'Search Results for: %s', 'twentysixteen' ), '<span>' . esc_html( get_search_query() ) . '</span>' ); ?></h1>
    			</header><!-- .page-header -->
    
    			<?php
    			// Start the loop.
    			while ( have_posts() ) : the_post();
    
    				if(function_exists('wppizza_search_results_get_template_part')){
    					wppizza_search_results_get_template_part('template-parts/content', 'search' );
    				}else{
    					get_template_part( 'template-parts/content', 'search' );
    				}
    
    			// End the loop.
    			endwhile;
    
    			// Previous/next page navigation.
    			the_posts_pagination( array(
    				'prev_text'          => __( 'Previous page', 'twentysixteen' ),
    				'next_text'          => __( 'Next page', 'twentysixteen' ),
    				'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'twentysixteen' ) . ' </span>',
    			) );
    
    		// If no content, include the "No posts found" template.
    		else :
    			get_template_part( 'template-parts/content', 'none' );
    
    		endif;
    		?>
    
    		</main><!-- .site-main -->
    	</section><!-- .content-area -->
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>
    
  • make sure the parameters match. i.e if your original template part is
    get_template_part( 'abcdef', 'xyz' );
    

    replace it with

    if(function_exists('wppizza_search_results_get_template_part')){
    	wppizza_search_results_get_template_part('abcdef', 'xyz' );
    }else{
    	get_template_part( 'abcdef', 'xyz' );
    }
    
  • make sure you keep everything before and after the changed codeblock intact
  • save the file
  • you should now have the same layout for a single wppizza item in your search results as you have when displaying categories (see below)

Quick summary:

  • COPY /[your]/[path]/[to]/wp-content/themes/my-theme/search.php TO /[your]/[path]/[to]/wp-content/themes/[my-child-theme]/wppizza/markup/search/search.php
  • REPLACE anything in created/copied search.php like
    # - codeblock to replace - #
    	while ( have_posts() ) : the_post();
    		get_template_part( 'abcdef', 'xyz' );
    	endwhile;
    # - codeblock to replace end - #

    width

    # - codeblock replace with - #
    	if(function_exists('wppizza_search_results_get_template_part')){
    		wppizza_search_results_get_template_part('abcdef', 'xyz' );
    	}else{
    		get_template_part( 'abcdef', 'xyz' );
    	}
    # - codeblock replace with end - #
  • keep everything else

Additional Notes:

The output generated is in fact a shortcode like so : echo do_shortcode("[wppizza single='9' showadditives='0']"); (where ‘9’ would be the appropriate post_id)
The arguments of which are filterable if you want , using ‘wppizza_filter_single_post_arguments’ hook like so

	
	add_filter('wppizza_filter_single_post_arguments', 'myprefix_filter_single_wppizza_items', 10, 2);
	function myprefix_allow_comments_for_single_wppizza_items($args, $terms){
		
		/ -  customise arguments as required -/
		
		return $args;	
	}

See wppizza shortcode documentation as to what arguments exist for single items and/or wordpress codex about how to use filters if you are unfimiliar with filter hooks