0

I am currently trying to retrieve an post (to put it before all others in the search results of a search filter I created) from an ACF boolean field (and I am a beginner), so I made this script but I don't get the expected result:

in my function.php:

// Set Meta Query Relation
        $metaQueryRelation = array( 'relation' => 'AND' );

        // Build Meta Query Params
        $metaQueryParams = array(
            'relation' => 'OR',
            'display_not_first' => array(
                'key' => 'order_by_first_post',
                'compare' => 'NOT EXISTS'
            ),
            'display_first' => array(
                'key' => 'order_by_first_post',
                'compare' => 'EXISTS'
            ),
        );

In the result file

// Get WP_Query custom args.
$argsRecipesGrid = buildArgs($params);

$display_first = $metaQueryParams['display_first']['compare'];

$result[$key] = arrayCopy( $val );

$queryRecipesGrid = new WP_Query( $argsRecipesGrid );

/** partie de code Richardson **/

$queryRecipesGrid = array();

// The sorting loop
foreach ($queryRecipesGrid as $post ){
        if ($display_first['compare'] == 'EXISTS'){
            array_unshift($display_first, $post); 
        }
        if($post->have_posts()):
        ?>
        <div class="recipes-row<?php echo $params['mines'] ? ' row-count-3' : ''; ?>">
            <?php
                while( $queryRecipesGrid->have_posts() ): $queryRecipesGrid->the_post();    
            ?>
            <div class="recipe-col">

                <a class="list--item-link" <?php if(get_post_status() == 'publish'){?>href="<?php echo get_permalink(); ?>"<?php }; ?>>
                        <?php get_template_part('tpl/recipes/card'); ?>
                </a>

            </div>

            <?php
                endwhile;

                    echo '</div>';

                    else :

                    echo '<div class="grid-row">';

                    echo '<div class="grid-col-12">';

                    echo '<p>' . __('Aucun résultat', 'galbani') . '</p>';

                    echo '</div>';

                    echo '</div>';

                    endif; 
                    ?>

                    <?php
                    echo get_pagination($queryRecipesGrid, $params);
                    ?>
0

It looks like you're clearing the queried posts by setting the posts var to an empty array.

$queryRecipesGrid = new WP_Query( $argsRecipesGrid ); // first you get the posts here    
/** partie de code Richardson **/    
$queryRecipesGrid = array(); // then you wipe them out by setting the same var to empty array.

Regarding the sorting, please refer to the example I provided you earlier, How to always display a specific post from the search result first

$my_acf_value = 1; // it might make sense to have this as post ID (as integer)
// Do your query
$queryRecipesGrid = new WP_Query( $argsRecipesGrid );
// Sort posts
$sorted_posts = array();
if ($queryRecipesGrid->posts) {
    foreach ( $queryRecipesGrid->posts as $post ) {
        if ( $post->ID == $my_acf_value ) { // change this to match your needs
            array_unshift($sorted_posts, $post);
        } else {
            $sorted_posts[] = $post;
        }
    }
}
// Render the posts
if ($sorted_posts) {
    foreach($sorted_posts as $sorted_post) {
    // html stuff
    }
}

NB: I used post ID for sorting in this example for the sake of simplicity. Please modify the code to match your real use case and data.

  • Ok thank you, your script is more consistent than mine – Frenchy_WP Feb 18 at 15:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.