web-dev-qa-db-fra.com

Comment implémenter un filtre temporel pour afficher les messages aléatoires 1 mois pour une catégorie et 3 mois pour les autres catégories

J'ai commencé à travailler sur un site Web après un autre développeur et il y a un problème avec son "widget populaire" qui affiche en gros 3 messages aléatoires de la catégorie. Il existe une déclaration Switch qui permet d'afficher, à partir de la catégorie actualités, 3 publications aléatoires ne datant pas d'au moins un mois et les autres catégories, 3 mois. Je ne comprends pas ce qu'il a fait là-bas avec ['intervalle'] mais quand j'utilise les paramètres de temps wordpress, je n'ai toujours pas de résultats.

function getSomePost($category,$postsPerPage=3) {
        global $post;

        $args = array(
            'category_name'=>$category,
            'posts_per_page'=>$postsPerPage,
            'post_type'=>'post',
            'post_status'=>'publish',
            'post__not_in'=>array($post->ID),
            'orderby'=>'Rand',
        );

        switch ($category)
        {
            case 'news':
                $args['interval'] = '1 MONTH';
                break;
            case 'analysis':
                $args['interval'] = '3 MONTH';
                break;
            case 'reports':
                $args['interval'] = '3 MONTH';
                break;
        }

        $query = new WP_Query($args);

        if ( $query->have_posts() ) {
               while ( $query->have_posts() ) {
               $query->the_post();
               $postThumbClass = 'no-thumb';
               ?>
                   <div <?php post_class(array('wp-post-entry', 'sidebar-post' )); ?>>
                    <?php if(has_post_thumbnail ()):?>
                        <?php $postThumbClass = '' ?>
                        <div class="wp-post-thumbnail">
                            <a href="<?php the_permalink() ?>">
                                <?php the_post_thumbnail(array(70,70)); ?>
                            </a>
                        </div>
                     <?php endif; ?>


                    <div class="wp-post-full-content <?php echo $postThumbClass ?> ">
                        <h3 class="wp-post-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<!--
                        <div class="post-content">
                            <?php the_excerpt() ?>
                        </div>
//-->
                    </div>
                </div>
               }
        }

    }

J'essayais de remplacer l'interrupteur intérieur

case 'news':
                $args['interval'] = '1 MONTH';
                break;

avec

case 'news':
    // Create a new filtering function that will add our where clause to the query
    function filter_where( $where = '' ) {
        // posts in the last 30 days
        $where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
        return $where;
    }

    add_filter( 'posts_where', 'filter_where' );
    $query = new WP_Query( $args );
    remove_filter( 'posts_where', 'filter_where' );
    break;

et

case 'analysis':
                    $args['interval'] = '3 MONTH';
                    break;

avec

case 'analysis':
// Create a new filtering function that will add our where clause to the query
function filter_where( $where = '' ) {
    // posts in the last 30 days
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-90 days')) . "'";
    return $where;
}

add_filter( 'posts_where', 'filter_where' );
$query = new WP_Query( $args );
remove_filter( 'posts_where', 'filter_where' );
break;

mais ça ne marche pas, j'ai aussi essayé d'utiliser if ($category == 'news') mais ça casse le site

2
levat

Vous ne pouvez pas déclarer plusieurs fonctions avec le même nom en PHP. Les exemples du Codex pour cela sont une démonstration technique, plutôt qu'un extrait prêt à l'emploi.

Donnez à vos fonctions de filtrage des noms uniques, qui ne risquent pas d'entrer en conflit avec votre propre code ou celui de tiers.

1
Rarst