web-dev-qa-db-fra.com

Requête personnalisée pour afficher les publications avec un champ personnalisé

Je rencontre un problème avec une requête personnalisée pour l'affichage de mes publications et je n'ai aucune chance sur le forum Wordpress ni sur le forum de plug-in que j'ai utilisé pour créer le type de publication personnalisée.

Voici un aperçu ...

J'ai un type de message personnalisé "Entreprise" Business CPT a deux taxonomies personnalisées - "Type d'entreprise" et "Comté"

J'ai utilisé le plug-in WP Types pour créer le type de message personnalisé et créer un champ personnalisé appelé "En vedette" à l'aide d'une case à cocher située dans la zone d'administration.

Cette case, si elle est sélectionnée, marque une entrée particulière comme "VEDETTE"

J'utilise un plugin appelé Search & Filter qui permet à un utilisateur de choisir un "type d'entreprise" dans le "comté", par exemple - Louer de la voiture à Londres

Ceci lance ensuite mon template search.php avec une requête qui DEVRAIT ...

  1. Affichez toutes les entreprises "VEDETTES" avec les taxonomies de location de voiture et de Londres comme vraies.
  2. Ensuite, affichez la fiche d'entreprise restante pour laquelle "En vedette" n'est pas définie sur true.

Alors

AFFAIRES EN VEDETTE

Daves Car

Entreprises restantes

Voitures ABC

123 voitures

etc.

En ce moment, Location de voitures compte 5 entreprises présentées. Ma requête les retire tous mais pas tous au sommet. Il suffit de les ajouter dans la liste alphabétique avec les listes d'entreprises régulières.

Cela me rend fou et j'espère que quelqu'un de bien supérieur à moi à PHP et Wordpress peuvent m'aider à résoudre ce problème.

Voici la requête que j'utilise actuellement

<?php   
    if (have_posts()): while (have_posts()) : the_post(); 
        $checked_meta = get_post_meta( $post->ID, 'wpcf-featured', true );

    if( $checked_meta ) { ?>   
    <article>
      <!--FEATURED BUSINESSES DISPLAY FIRST-->
    </article>
<?php } endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata();?>

<hr class="bottom-padding" />

<?php 
    $posts = query_posts($query_string . '&orderby=title&order=asc'); 
    if (have_posts()) : while (have_posts()) : the_post();?>

        <article class="row business-index" id="post-<?php the_ID(); ?>">
            <!--Normal Business Listings--> 
        </article>      
    <?php endwhile; ?>
    <?php endif; ?>

Tout ce que je veux faire, c'est afficher toutes les entreprises "sélectionnées" pour cette recherche particulière en premier, puis afficher les listes restantes.

Je suis au bout d'un très court morceau de corde avec ça maintenant. J'espère que quelqu'un pourra me sauver la tête. hahaha

Merci

Dan

1
Daniel Winnard

Comme @ jdm2112 l'a impliqué, WP_Query pour votre deuxième affichage est préféré à query_posts. Essayez également d'utiliser WP Query pour votre premier affichage.

Cela ressemblerait à quelque chose comme:

<?php  $args = array(
    'post_type'   => 'cars', // or whatevr the custom post type is 
    'post_status' => 'publish',

    'meta_query'     => array(
        array(
            'key' => 'wpcf-featured',
            'value' => true, // perhaps "true" instead?
            'compare' => '=' // or "LIKE"
        ),
);

$cars_query = new WP_Query( $args );

if ( $cars_query->have_posts() ) : while ( $cars_query->have_posts() ) : $cars_query->the_post(); ?>

<article></article>

<?php endwhile; ?>
<?php else: ?>
<?php endif; wp_reset_query(); ?>
1
Taruc