web-dev-qa-db-fra.com

Rechercher par ID de publication et afficher le contenu de la publication dans les résultats de recherche

Je souhaite utiliser le champ de recherche pour rechercher un message par ID de message et afficher le contenu du message dans les résultats de la recherche. J'ai fait une recherche approfondie mais je n'ai pas eu de réponse satisfaisante. Je n'ai pas besoin de l'URL du message, j'ai besoin de tout le contenu du message ou de la page.

S'il vous plaît aider.

5

Mettez n'importe lequel des filtres dans le fichier functions.php

Utiliser les messages pre get

// Filter the search page
add_filter('pre_get_posts', 'search_pre_get_posts');

function search_pre_get_posts($query)
{
    // Verify that we are on the search page that that this came from the event search form
    if($query->query_vars['s'] != '' && is_search())
    {
        // If "s" is a positive integer, assume post id search and change the search variables
        if(absint($query->query_vars['s']))
        {
            // Set the post id value
            $query->set('p', $query->query_vars['s']);

            // Reset the search value
            //$query->set('s', '');
        }
    }
}

Utiliser les posts où query

add_filter('posts_where', 'posts_where');
    function posts_where($where)
        {

            $s = $_GET['s'];

            if(!empty($s))
            {
              if(is_numeric($s))
              {
                global $wpdb;

                $where = str_replace('(' . $wpdb->posts . '.post_title LIKE', '(' . $wpdb->posts . '.ID = ' . $s . ') OR (' . $wpdb->posts . '.post_title LIKE', $where);
              }
              elseif(preg_match("/^(\d+)(,\s*\d+)*\$/", $s)) // string of post IDs
              {
                global $wpdb;

                $where = str_replace('(' . $wpdb->posts . '.post_title LIKE', '(' . $wpdb->posts . '.ID in (' . $s . ')) OR (' . $wpdb->posts . '.post_title LIKE', $where);
              }
            }


          return $where;
        }

Utilisez l'une des fonctions de votre choix. La première fonction vous donne une recherche exacte à l'aide de l'identifiant de recherche. ex: 1 ne vous donne qu'un seul post.

Maintenant, comment afficher tous les messages de valeur, je vous donne des conseils.

Modifiez votre search.php ou ajoutez search.php dans votre thème. En gros, chaque thème a search.php, il vous suffit donc de le modifier un peu.

Je vous donne un exemple de code pour search.php. vous le modifierez selon vos besoins.

<?php
if ( have_posts() ) :
while ( have_posts() ) :  the_post();
$post_id = get_the_ID();
$id = get_post_thumbnail_id($post_id);
$image = wp_get_attachment_image_url($id,'full');
?>
// Print The title
<?php echo get_the_title($post_id); ?>
//print full content of the post
<?php echo get_the_content(); ?>
//print the excert
<?php print get_the_excerpt($post_id); ?>
// print the image  
<img src="<?php echo $image; ?>" class="attachment-portfolio-three size-portfolio-three wp-post-image" alt="">
// suppose custom field
<a href="<?php echo get_the_permalink($post_id); ?>">
                          <?php echo get_post_meta($post_id,'custom_field_1',true);?>
                        </a>
// suppose custom field 2
<a href="<?php echo get_the_permalink($post_id); ?>">
                          <?php echo get_post_meta($post_id,'custom_field_2',true);?>
                        </a>
// suppose custom field  3                          
<a href="<?php echo get_the_permalink($post_id); ?>">
                          <?php echo get_post_meta($post_id,'custom_field_2',true);?>
                        </a>                                                        
<?php endwhile;?>
<?php wp_reset_query();
// print pagination and also its arg if you use my code.
paginate_links($args); 
else :
?>
<p><?php _e( 'Sorry, but nothing matched your search terms. Please try again with some different keywords.', 'twentyseventeen' ); ?></p>
  <?php
    get_search_form();

endif;
?>
4
Faysal Mahamud