web-dev-qa-db-fra.com

Est-il possible de changer un statut de publication existant de "en attente" à "publier" par courrier électronique?

Je construis un site Web qui utilise un plugin de formulaire personnalisé, et ce plugin me permet de créer des publications (en attente ou publiées) à l'aide des données du formulaire. Lors de l'envoi du formulaire, je souhaite qu'une liste spécifique de personnes reçoive une notification par courrier électronique du message en attente à réviser, qu'elles peuvent approuver (mettre à jour le statut du message pour le publier) en un clic. Des idées?

Actuellement, ma solution consiste à transférer le courrier électronique vers une adresse électronique que j'utilise pour la publication, mais il s'agit d'une solution peu pratique.

1
LegMuscleCramp

Étape 1 - Enregistrer un var de requête personnalisé

En ajoutant une requête personnalisée var, vous en indiquez WP afin de pouvoir l'utiliser dans les requêtes.

function wpse_add_query_vars( $vars ) {
    $vars[] = 'wpse_set_to_publish';
    return $vars;
}
add_filter( 'query_vars', 'wpse_add_query_vars' );

Étape 2 - Renifler la demande

Maintenant, nous accrochons dans parse_request pour rechercher notre nouvelle requête personnalisée var. C'est là que vous le traitez et cela peut devenir aussi compliqué ou simple que vous le souhaitez. Par exemple, pour des raisons de sécurité, vous pouvez vérifier l’existence d’un jeton stocké en tant que postmeta ou transitoire. Mais au niveau le plus fondamental:

function wpse_sniff_request( $query ) {
    if ( ! is_admin() && isset( $query->query_vars['wpse_set_to_publish'] ) ) {
        $post_vars = array(
            'ID' => $query->query_vars['wpse_set_to_publish'],
            'post_status' => 'publish'
        );
        wp_update_post( $post_vars );
    }
}
add_action( 'parse_request', 'wpse_sniff_request' );

Remarque: vous pouvez également ignorer la première étape et effectuer cette étape dans un hook init et intercepter plutôt $_GET['wpse_set_to_publish'], mais ce n'est pas exactement la "méthode Wordpress" .

Étape 3 - Fournir un lien d'approbation par courrier électronique

Enfin, en supposant que vous générez le courrier électronique envoyé, vous pouvez inclure un lien avec quelque chose du genre:

echo add_query_arg( array( 'wpse_set_to_publish' => $post_id ), site_url() );

Remarque: vous obtiendrez probablement le $post_id à partir de la valeur de retour de wp_insert_post(). .

Ensuite, une fois que la personne a cliqué sur ce lien, il devrait les porter à http://yourwebsite.com/?wpse_set_to_publish=123 et cela mettra à jour la publication avec l’ID de 123 avec le statut de publication.

Malheureusement, je n'ai pas le temps de tester tout cela à présent, mais cela devrait vous orienter dans la bonne direction. Encore une fois, il s’agit de la mise en œuvre la plus élémentaire et vous devez toujours tenir compte de la sécurité, des autorisations, etc. Bien que cela puisse également être plus pratique, il serait théoriquement beaucoup plus sûr si vous fournissez un lien vers get_edit_post_link() qui obligerait l'utilisateur à se connecter (s'il ne l'était pas déjà), il pourrait alors se déplacer à droite pour publier à partir de l'administrateur .

1
brianjohnhanna