web-dev-qa-db-fra.com

Créer une taxonomie personnalisée qui sera utilisée pour créer et filtrer des marqueurs dans une carte Google

J'essaie de créer un shortcode Wordpress qui générera une carte Google filtrable sur toute la largeur avec un ensemble de marqueurs qui seront chargés lors du premier chargement (et affichés ou masqués en fonction des filtres choisis).

Le fait est que je n’avais jamais utilisé/utilisé de taxonomie auparavant, et j’ai pensé que ce serait une bonne idée d’en créer une. description ", mais je ne sais pas trop comment procéder pour y parvenir.

Quelqu'un peut-il m'aider, s'il vous plaît, à créer cette taxonomie, puis à charger tous les éléments dans Wordpress par programmation? Merci d'avance.

1
Oriol A.

Voici un exemple pleinement fonctionnel pour vous aider à démarrer.

Enregistrer la taxonomie du "marqueur"

register_taxonomy( 'marker',
    'post',
    array(
        'hierarchical'          => false,
        'update_count_callback' => '_update_post_term_count',
        'label'                 => __( 'Markers', 'textdomain' ),
        'labels' => array(
                'name'              => __( 'Markers', 'textdomain' ),
                'singular_name'     => __( 'Marker', 'textdomain' ),
                'menu_name'         => _x( 'Markers', 'Admin menu name', 'textdomain' ),
                'search_items'      => __( 'Search Markers', 'textdomain' ),
                'all_items'         => __( 'All Markers', 'textdomain' ),
                'parent_item'       => __( 'Parent Marker', 'textdomain' ),
                'parent_item_colon' => __( 'Parent Marker:', 'textdomain' ),
                'edit_item'         => __( 'Edit Marker', 'textdomain' ),
                'update_item'       => __( 'Update Marker', 'textdomain' ),
                'add_new_item'      => __( 'Add New Marker', 'textdomain' ),
                'new_item_name'     => __( 'New Marker Name', 'textdomain' )
            ),
        'rewrite'               => false,
    )
);

Nous devons maintenant ajouter les crochets pour ajouter/sauvegarder les champs nécessaires à cette taxonomie.

add_action( 'marker_add_form_fields',   'marker_add_fields', 10, 2 );
add_action( 'marker_edit_form_fields',  'marker_edit_fields', 10, 2 );
add_action( 'created_marker',           'save_marker_meta', 10, 2 );
add_action( 'edited_marker',            'save_marker_meta', 10, 2);

Cette fonction ajoute les champs pour ajouter un nouvel écran de taxonomie

function marker_add_fields() {
    ?>
    <div class="form-field">
        <label for="latitude"><?php _e( 'Latitude' ); ?></label>
        <input type="text" name="latitude" id="latitude" value="">
    </div>

    <div class="form-field">
        <label for="longitude"><?php _e( 'Longitude' ); ?></label>
        <input type="text" name="longitude" id="longitude" value="">
    </div>
    <?php
}

Cette fonction ajoute les champs à l'écran d'édition de la taxonomie

function marker_edit_fields( $term, $taxonomy ) {
    $latitude   = get_term_meta( $term->term_id, 'latitude', true );
    $longitude  = get_term_meta( $term->term_id, 'longitude', true );
    ?>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="latitude"><?php _e( 'Latitude' ); ?></label></th>
        <td>
            <input type="text" name="latitude" id="latitude" value="<?php echo $latitude; ?>">
        </td>
    </tr>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="longitude"><?php _e( 'Longitude' ); ?></label></th>
        <td>
            <input type="text" name="longitude" id="longitude" value="<?php echo $longitude; ?>">
        </td>
    </tr>
    <?php
}

Enfin, cette fonction enregistre les valeurs de champs personnalisés pour notre nouvelle taxonomie.

function save_marker_meta( $term_id, $tt_id ){
    if( isset( $_POST['latitude'] ) && '' !== $_POST['latitude'] ){
        update_term_meta( $term_id, 'latitude', $_POST['latitude'] );
    }
    if( isset( $_POST['longitude'] ) && '' !== $_POST['longitude'] ){
        update_term_meta( $term_id, 'longitude', $_POST['longitude'] );
    }
}
0
Ahmed Fouad