web-dev-qa-db-fra.com

Comment envoyer une erreur à l'utilisateur lors de la sauvegarde d'un post

J'ai créé un type d'article personnalisé et lors de la sauvegarde de ses données supplémentaires, je souhaite vérifier si un article publié existe par son nom. Cela fonctionne bien s'il y en a un, mais je voudrais lancer un avis si l'article n'est pas trouvé.

    $post_exists = $wpdb->get_row("SELECT post_name FROM wp_posts WHERE post_name = '" . $_POST['article_name'] . "' AND post_type = 'post'", 'ARRAY_A');
    if($post_exists)
        update_post_meta($id, 'article_name', strip_tags($_POST['article_name']));
    else
        ???

J'ai remarqué qu'il y a http://codex.wordpress.org/Class_Reference/WP_Error mais je ne pense pas que c'est ce que je veux depuis que le débogage est défini sur false ?. L'erreur peut être n'importe quoi - un avis habituel conviendrait, mais même une simple alerte javascript pourrait être bonne. Actuellement, il me dit que le message est enregistré avec des feux verts qui ne semblent pas bien http://s1.postimg.org/kmjjjvuvj/image.jpg

3
Marko

Vous pouvez utiliser admin_notices hook http://codex.wordpress.org/Plugin_API/Action_Reference/admin_notices

Par exemple:

function ravs_admin_notice() {
    ?>
    <div class="error">
        <p><?php _e( 'Article with this title is not found!', 'my-text-domain' ); ?></p>
    </div>
    <?php
}

sur publish_{your_custom_post_type} hook http://codex.wordpress.org/Post_Status_Transitions

function on_post_publish( $ID, $post ) {
    // A function to perform actions when a {your_custom_post_type} is published.
    $post_exists = $wpdb->get_row("SELECT post_name FROM wp_posts WHERE post_name = '" . $_POST['article_name'] . "' AND post_type = 'post'", 'ARRAY_A');
    if($post_exists)
        update_post_meta($id, 'article_name', strip_tags($_POST['article_name']));
    else
       add_action( 'admin_notices', 'ravs_admin_notice' );
}
add_action(  'publish_{your_custom_post_type}',  'on_post_publish', 10, 2 );
5
Ravinder Kumar

La notice est facile à définir via le hook admin_notices. Vous pouvez définir sur chaque page un message via ce hook.

function my_admin_notice() {
    ?>
    <div class="updated">
        <p><?php _e( 'Updated!', 'my-text-domain' ); ?></p>
    </div>
    <?php
}
add_action( 'admin_notices', 'my_admin_notice' );

Ping ce crochet sur votre autre construction.

else
    add_action( 'admin_notices', 'my_admin_notice' );

Vérifiez dans la fonction my_admin_notice() le type de message ou utilisez-le uniquement sur le crochet publish_{custom_post_type}.

La couleur est une dépendance de la classe css.

enter image description here

Vous trouverez beaucoup plus d'informations sur les classes et le code HTML dans ce plugin helper .

2
bueltge