web-dev-qa-db-fra.com

Crochet pour la mise à jour post permalien

Je voudrais savoir quel crochet devrais-je utiliser lorsque le permalink/url d'un article est modifié. Mon but est d'obtenir l'ancien permalien et le nouveau permalien afin de pouvoir l'utiliser pour mon plugin. Merci.

[EDIT] Je veux juste clarifier la question. Je souhaite obtenir l'ancienne et la nouvelle URL dans un scénario, par exemple, lorsqu'un utilisateur sélectionne une publication dans la zone d'administration et modifie le permalink/url actuel (/ helloworld) dans un nouveau permalink/url (/ helloworld_new) de l'article sélectionné. Je voudrais obtenir l'URL complète du poste en cours de modification.

2
Pelang

Vous devez utiliser exactement wp_insert_post_data. Cela contient un tableau de données postérieures à ce qui sera stocké dans la base de données après que WordPress ait effectué toutes les opérations de validation/désinfection.

add_filter('wp_insert_post_data', 'wpse_wp_insert_post_data', 10, 2);
function wpse_wp_insert_post_data($data, $post_attr)
{
    // you get the post_name using $data['post_name'];

    // post id will not be present for the first insert
    // but you can check $post_attr['ID'] to be sure if an ID has been passed.
    // note: $data won't contain post id ever, only the $post_attr will have it

    // if you want to compare the name, you could use -
    if( isset($post_attr['post_name']) 
        && !empty($post_attr['post_name']) 
        && $post_attr['post_name'] != $data['post_name'] )
    {
        // So here you can guess post name has been changed
        // note: $post_attr['post_name'] might come undefined or empty sometime.
        // and $data['post_name'] could also comes up empty, but it will be always defined
    }

    // you do not need to modify anything, so you should return it as it is
    return $data;
}

J'espère que ça aide.

1
Shazzad

L'action est update_option_permalink_structure.

L'exemple suivant fonctionne avec ce crochet.

add_action( 'update_option_permalink_structure' , 'my_custom_function', 10, 2 );
function my_custom_function( $old_value, $new_value ) {

    // test
    var_dump( $old_value );
}

Le hook dans ce contexte est toujours update_option_{$option} [ou update_option_{$option_name} (obsolète depuis WordPress 3.6)].

Également lié est pre_update_option_{$option} et un point d'ancrage pour la version multisite update_site_option_{$option} et pre_update_site_option_{$option}.

0
bueltge