web-dev-qa-db-fra.com

Comment puis-je supprimer les publications d'une certaine catégorie de la page d'accueil après une période donnée?

Je voudrais savoir comment supprimer les messages d'une certaine catégorie de ma page d'accueil après une certaine période (mais sans expiration des messages).

Mon site est actuellement configuré pour afficher mes derniers messages de blog de la catégorie "Basique".

La catégorie "Basic" comprend les sous-catégories suivantes:

De base

- Annonces

- Spécifique à l'entreprise

-- Industrie

-- Autre

-- Tierce personne

- - Fisco

La sous-catégorie "tierce partie" contient des publications hebdomadaires. Toutes les autres sous-catégories combinées s’ajoutent à une publication hebdomadaire. Par conséquent, la moitié du contenu de ma page d'accueil provient de la sous-catégorie "tierce partie". Je voudrais configurer ceci de manière à ce que les messages de "tierce partie" soient supprimés de la page d'accueil après 14 jours.

1
cyoung1989

Cela semble simple, mais malheureusement, parce que wp_query ne vous permet pas d’exclure des publications sur la base de plusieurs arguments (dans ce cas, la catégorie et la date). Vous pouvez sélectionner sur la base de plusieurs arguments, mais pas exclure. Donc, pour faire ce que vous voulez, vous devez en quelque sorte regrouper vos deux arguments en un. Conceptuellement, vous sélectionnez les publications que vous ne souhaitez pas utiliser, puis vous utilisez cette liste pour les exclure sur la base de leurs identifiants. Et c'est parti:

add_action ('pre_get_posts', 'wpse308323_multiple_exclude', 10, 1);
function wpse308323_multiple_exclude ($query) {
  // only do this on home page for main query
  if ( $query->is_home() && $query->is_main_query() && ! is_admin() ) {
    // define posts to exclude and get them
    $args = array (
      'category_name' => 'third-party',
      'date_query' => array(
        array(
          'before' => '2 weeks ago'
           )
        )
      );
    $q2 = new WP_Query ($args);
    // extract an array of ID's from the posts retrieved in $q2
    $q2_ids = wp_list_pluck ($q2->$posts,ID);
    // exclude these ID's from the main query
    $query->set ('post__not_in', $q2_ids);
    }
  }

Avertissement: le code ci-dessus est donné pour montrer le concept. Je ne l'ai pas testé, un débogage peut donc être nécessaire. Quelques références:

2
cjbj