web-dev-qa-db-fra.com

Recevez chaque semaine le nombre de posts publiés

J'essaie de créer une alerte e-mail tous les lundis à minuit pour indiquer le nombre de publications publiées la semaine dernière sur le site.

J'ai créé 2 variables: $post_published_to_date qui correspond au nombre total de publications sur le site (j’ai supposé ici que le site venait d’être créé), et $published_posts au nombre de publications publiées au cours de la semaine écoulée.

J'ai utilisé date('D', $timestamp) === 'Mon' && $timestamp = strtotime('midnight') dans la déclaration if pour savoir s'il est lundi à minuit. Si c'est le cas, un email est envoyé à l'administrateur avec le nombre de publications publiées.

Je ne suis pas sûr que régler $published_posts à 0 à la fin fonctionnera bien et je crains que $post_published_to_date ne soit réinitialisé à 0 à chaque fois. Je commence en php donc je ne suis pas vraiment sûr ici.

 <?php
    $post_published_to_date = 0;
    $published_posts = wp_count_posts()->publish;

    if(date('D', $timestamp) === 'Mon' && $timestamp = strtotime('midnight')) { 
    $post_published_to_date = $post_published_to_date + $published_posts;


    add_action( 'publish_post', 'number_of_posts_published', 10 ,2 );
    function number_of_posts_published( $ID, $post, $published_posts; ) {
        if ( 'post' !== $post->post_type)
            return;

        $to = '[email protected]'
        $subject = 'Number of posts last week';
        $headers = array('Content-Type: text/html' );
        $message = '<h3> Hello ! </h3> <p>  

        Last week, $published_posts posts were published on your site. ';


        wp_mail( $to, $subject, $message, 'Content-Type: text/html' ); 
    }


    $published_posts = 0; 
    }

    ?>

Cela fonctionnerait-il comme prévu? Conseilleriez-vous des modifications qui constituent de meilleures pratiques?

Merci pour votre temps et votre aide

1
Graham Slick

Voici une utilisation de base de WP_Query qui renvoie un objet contenant toutes les publications de la semaine en cours sous la forme $query. La dernière ligne renvoie la propriété `found_posts ', qui fournit le nombre pour la requête de la semaine.

    $args = array(
        'date_query' => array(
            array(
                'year' => date( 'Y' ),
                'week' => date( 'W' ),
            ),
        ),
    );
    $query = new WP_Query( $args );
    echo $query->found_posts;

Pour ce qui vous concerne, je ne sais pas si la semaine est basée sur un calendrier empirique ou sur les calendriers de votre site, tels que Paramètres> Général>.

Avec un peu de test, vous devriez être capable de produire des résultats fiables pour votre email chaque semaine. https://codex.wordpress.org/Class_Reference/WP_Query#Date_Parameters

1
jdm2112