web-dev-qa-db-fra.com

renvoie les valeurs des hooks do_action et apply_filters, ce qui est mieux

Parmi les méthodes suivantes, je me demande quelle est la meilleure méthode pour mettre à jour une valeur d'option lorsque la valeur à mettre à jour provient d'un rappel ajax. Puisque Wordpress Codex dit clairement que apply_filters est utilisé pour renvoyer les valeurs formatées, où do_actions est utilisé pour les exécutions de fonctions logiques.

add_action('wp_ajax_test_action', 'testAction');

///****** Method 1 ********///
function testAction() {
    $test = apply_filters('test_filter', 'test');

    wp_send_json($test);
}

add_filter('test_filter', 'test_filter_function', 10, 1);

function test_filter_function($value) {
   $success = get_option('update_from_test_doaction') !== false ?
                    update_option('update_from_test_doaction', $value, 'yes') : add_option('update_from_test_doaction', $value, '', 'yes');
if($success)
return 'Updated';

return 'Not updated';
}


///****** Method 2 ********///
function testAction() {
    $test = apply_filters('test_filter', 'test');

      $test2 = get_option('update_from_test_doaction', '');

    do_action('test_doaction', $test);

$sendJson = 'Not updated';
if($test != $test2)
$sendJson = 'Updated';

    wp_send_json($sendJson);
}

add_filter('test_filter', 'test_filter_function', 10, 1);

function test_filter_function($value) {
   // $value .= '123';
    return $value;
}

add_action('test_doaction', 'test_doaction_functin', 10, 1);

function test_doaction_functin($value) {
    get_option('update_from_test_doaction') !== false ?
                    update_option('update_from_test_doaction', $value, 'yes') : add_option('update_from_test_doaction', $value, '', 'yes');
}
2
mpsbhat

Contrairement aux commentaires ... je dirais que vous devriez utiliser le filtre comme dans la méthode 1 parce que ...

  1. Le message dépendra d'un certain nombre de choses à l'heure actuelle. Vous venez de faire un test si, plus tard, le message peut dépendre d'autres facteurs (comme peut-être la validation d'un nonce en cas d'échec donnant le message 'Aucun invalide').
  2. Les actions aident à étendre les fonctionnalités de votre code ... plus tard sur un autre plugin (ou peut-être un thème, si votre plugin est incroyablement célèbre: D) peut vouloir changer le message pour qu'il soit plus convivial, comme Sorry, couldn't update.

C'est toujours plus facile avec les filtres, souvenez-vous que chaque fois qu'une valeur est impliquée (comme un message de sortie ou une valeur enregistrée dans la base de données), il est préférable d'utiliser des filtres.

0
shramee