J'ai un problème avec un hook WordPress. Je veux appeler une action dans un autre rappel d'actions, mais cela ne semble pas fonctionner. Je souhaite appeler l'action add_meta_tag
uniquement si la page est enregistrée. C'est ce que j'ai
function saveCustomField($post_id)
{
add_action( 'wp_head', 'add_meta_tag' );
}
add_action( 'save_post', 'saveCustomField' );
function add_meta_tag(){
echo "TEST";
}
Comment puis-je obtenir ce qui précède pour fonctionner correctement?
Vous pensez à cela totalement faux. Une méta-tag n'est pas quelque chose que vous ajoutez quand un article est enregistré, mais quelque chose qui est ajouté à la sortie quand un article est visualisé .
Ainsi, au lieu d'essayer d'accrocher l'action dans save_post
, vous l'accrochez à chaque chargement de page et à l'intérieur le crochet que vous vérifiez si votre champ personnalisé existe dans la publication en cours de visualisation. Si c'est le cas, vous exportez la balise.
function wpse_283352_add_meta_tag() {
if ( is_singular() {
$post_id = get_queried_object_id();
$meta = get_post_meta( $post_id, '_my_custom_field', true );
if ( $meta ) {
echo '<meta name="my_custom_field" content="' . esc_attr( $meta ) . '">';
}
}
}
add_action( 'wp_head', 'wpse_283352_add_meta_tag' );
Cette fonction va simplement dans votre fichier de plugin/fichier de fonctions, pas dans un autre crochet.
Le hook save_post
est déclenché une fois les données enregistrées dans la base de données - chaque fois que la publication ou la page est créée ou mise à jour - uniquement sur les pages d'administration.
Le hook wp_head
se déclenche lorsque la fonction wp_head()
est exécutée et cela ne se produit pas sur les pages d'administration.
Cela ne marchera pas. Où et quand voulez-vous ajouter la balise META?
La réponse courte: vous ne pouvez pas.
Le code est correct, mais il y a une faille dans la logique. wp_head
l'action est définie trop tard. Les en-têtes sont déjà envoyés, donc wp_head
ne sera jamais déclenché! Ce code ci-dessous prouvera deux points. D'abord: save_post
se déclenchera aussi bien sur les pages d'administration que sur les serveurs frontaux. Deuxièmement: il est facile d’empêcher une boucle infinie dans la fonction de rappel.
Dans functions.php
:
function saveCustomField($post_id) {
// to prevent an infinite loop
remove_action('save_post', 'saveCustomField', 10);
// to prove that function was called
error_log('I am here to add action');
add_action('wp_head', 'add_meta_tag');
}
add_action('save_post', 'saveCustomField');
function add_meta_tag(){
error_log('TEST');
//echo "TEST";
}
Dans mon modèle de page (front end):
wp_update_post(array('ID' => 79, 'post_title' => 'My Current Test',));
En error_log:
[19-Oct-2017 02:57:08 UTC] I am here to add action
Le titre de mon message avait été mis à jour, save_post
a été congédié et wp_head
ne l'était pas.
Je veux ajouter la balise META lorsque le bouton Publier/Mettre à jour est activé. J'ai une case à cocher sur la page d'administration qui ajoute/supprime une balise méta. Pour info, il est destiné à un plugin.
function saveCustomField($post_id)
{
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (
!isset($_POST['my_custom_nonce']) ||
!wp_verify_nonce($_POST['my_custom_nonce'], 'my_custom_nonce_'.$post_id)
) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
if (isset($_POST['_my_custom_field'])) {
update_post_meta($post_id, '_my_custom_field', $_POST['_my_custom_field']);
// here
// >>>>> add_action('wp_head', 'add_meta_tag');
} else {
delete_post_meta($post_id, '_my_custom_field');
}
}
add_action( 'save_post', 'saveCustomField' );
function add_meta_tag(){
echo "TEST";
}