web-dev-qa-db-fra.com

Champs d'auteur personnalisés + Taxonomie existante - Intégrer les deux de manière dynamique?

J'essaie d'intégrer à la fois les valeurs d'une taxonomie personnalisée existante et les champs de profil d'auteur. Je voudrais que les valeurs soient utilisées comme options parmi lesquelles un auteur peut sélectionner lors de la mise à jour/du remplissage de son profil.

Les travaux ci-dessous - en quelque sorte. (Trouvé dans le fichier functions.php)

Il enregistre dans la base de données (table des utilisateurs) mais la radio "cochée" ne sauvegarde pas. De plus, il ne s’imprime pas correctement dans la section de profil et ressemble à ceci (juste avant le bouton radio) checked="checked" />

... Voici le code complet

<tr>
<th><label for="sorority"><?php _e('What sorority are you in?'); ?></label></th>
    <td>
        <?php $sorority = get_the_author_meta( 'sorority', $user->ID ); ?>
        <?php
             $terms = get_terms("sorority");
             $count = count($terms);
             echo '<ul>';
                    foreach ( $terms as $term ) {   
                        echo '<li><input type="radio" value="' . esc_attr( $term->name ) . '" name="sorority" <?php if ($sorority == "' . esc_attr( $term->name ) . '") { ?>checked="checked"<?php }?> />'.$term->name.'</li>';
             }
             echo "</ul>";
            ?>
    </td>
</tr>

Des pensées? Je crois que le problème est quelque chose avec cette ligne:

 <?php if ($sorority == "' . esc_attr( $term->name ) . '") { ?>checked="checked"<?php }?> 
2
Caroline

Je suis sûr que vous pouvez également utiliser des catégories/balises (vous pouvez également utiliser des entrées radio et coché = "coché":

<tr>
 <th><label for="sorority"><?php _e('Sorority is...') ?></label></th>
  <td><?php $sorority = get_the_author_meta( 'sorority', $user->ID ); ?>
    <select name="sorority" id="sorority">
    <?php $terms = get_terms('sorority'); foreach ( $terms as $term ) { ?>
    <option name="sorority" value="<?php echo $term->name; ?>" <?php if ( $sorority == $term->name ) {?> selected="selected" <?php }?>><?php echo $term->name; ?></option>
    <?php } ?>
    </select>
 </td> 
</tr>
1
Caroline

Mamaduka,

Merci pour votre réponse. Non, ce n'est pas une opération de sauvegarde postérieure - cette création de champs de profil utilisateur supplémentaires (http ~/wp-admin/user-edit.php) avec les valeurs qui sont également des "descendants" d'une taxonomie personnalisée.

c'est à dire. Taxonomie = Crème glacée, descendants/enfants/taxonomies = Chocolat, Vanille. Je veux que Chocolate et Vanilla soient des options parmi lesquelles un auteur peut choisir lorsque la question posée dans son profil est posée "Quelle est votre glace préférée?" Cependant, il y a des centaines de saveurs de crème glacée, et au lieu de créer manuellement toutes ces valeurs "potentielles" - je voudrais utiliser les données de taxonomie pour créer dynamiquement de telles options. Cela signifie que si j'ajoute une nouvelle taxe sur les enfants appelée "fraise" sous "Ajouter une nouvelle crème glacée", cette option devrait également s'afficher automatiquement dans la page de modification de l'utilisateur/du profil.

Voir le code de mon fichier functions.php ci-dessous. Cela crache les données correctes mais il est "cassé" quand il sort à l'écran (il ressemble à ceci juste avant le bouton radio: vérifié = "vérifié" /> Chi Omega )

De plus, le bouton radio lorsque SÉLECTIONNÉ et SAUVEGARDÉ ne sera pas enregistré comme sélectionné, mais il stocke les valeurs correctement sélectionnées dans la base de données de la table des utilisateurs.

Toute aide est très appréciée.

add_action ( 'show_user_profile', 'my_show_extra_profile_fields' );
add_action ( 'edit_user_profile', 'my_show_extra_profile_fields' );
function my_show_extra_profile_fields ( $user ) 
{
?>
<h3>Additional Information</h3>
<table class="form-table">

<tr>
        <th><label for="sorority"><?php _e('What is your sorority?'); ?></label></th>
        <td>
        <?php $sorority = get_the_author_meta( 'sorority', $user->ID ); ?>
        <?php
             $terms = get_terms("sorority");
             $count = count($terms);
             echo '<ul>';
                    foreach ( $terms as $term ) {   
                        echo '<li><input type="radio" value="' . esc_attr( $term->name ) . '" name="sorority" <?php if ($sorority == "' . esc_attr( $term->name ) . '") { ?>checked="checked"<?php }?> />'.$term->name.'</li>';
             }
             echo "</ul>";
            ?>
</td>           
</tr>

</table>
<?php }   
add_action ( 'personal_options_update', 'my_save_extra_profile_fields' ); 
add_action ( 'edit_user_profile_update', 'my_save_extra_profile_fields' );

function my_save_extra_profile_fields( $user_id )
{ if ( !current_user_can( 'edit_user', $user_id ) )
    return false;
update_usermeta( $user_id, 'sorority', $_POST['sorority'] );
}
0
Caroline