web-dev-qa-db-fra.com

get_terms sur le hook save_post

Habituellement, si je veux vérifier certains attributs de la publication que je suis sur le point de publier, je vérifierai comme ceci:

$post_title = $_POST['post_title'];

post_title est le nom du champ de titre dans la fenêtre d'édition.

Je pensais appliquer la même logique à la méta-boîte de taxonomie.

$formats = $_POST['tax_input[formats][]'];

Essentiellement, j'essaie de vérifier si un terme de taxonomie spécifique est sélectionné lorsque je publie un article.

2
AlxVallejo

Vous êtes sur la bonne voie.

Quand vous faites quelque chose comme ça sous une forme ..

<input name="tax_input[formats][]" />

Vous créez des niveaux dans le tableau $_POST.

Donc, vous obtiendrez le tableau de formats comme ceci ...

<?php
$formats = $_POST['tax_input']['formats'];

Exemple complet ...

<?php
add_action('save_post', 'wpse74017_save');
function wpse74017_save($post_id)
{
    // check nonces and capabilities here.

    // use a ternary statement to make sure the input is actually set
    // remember that `save_post` fires on every post save (any post type).
    $formats = isset($_POST['tax_input']['formats']) ? $_POST['tax_input']['formats'] : array();

     // do stuff with $formats
}
0
chrisguitarguy
$formats = $_POST['tax_input[formats][]'];

???????

Un var_dump( $_POST ); pourrait être utile

'tax_input' => 
    array (size=1)
      'post_tag' => string 'tag_a,tag_b,tag_c' (length=...)

Essaye ça:

add_action( 'save_post', 'find_post_tax' );

function find_post_tax(){

  $tax_to_fetch = 'supersonicscrewdriver';
  $found = false;

  if( isset( $_POST['tax_input']['formats'] ) && ! empty( $_POST['tax_input']['formats'] ) ){
    $taxs = explode( ',', $_POST['tax_input']['formats'] );
    $found = in_array( $tax_to_fetch, $taxs );
  }

  return $found;

}
1
Ralf912