web-dev-qa-db-ja.com

Google Mapでマーカーを作成してフィルタするために使用されるカスタム分類法を作成する

最初のロード時にロードされる(選択されたフィルターに応じて表示または非表示になる)マーカーのセットを含む全角のフィルター処理可能なGoogle Mapを出力するWordpressショートコードを作成しようとしています。

つまり、これまでカスタム分類法を使ったことがないので、作成することをお勧めします。「緯度、経度、タイトル、および属性」という属性を持つ「マーカー」という「クラス」について考えていました。 "だが、これを達成するための進め方がよくわからない。

誰かがこの分類法を作成する方法について私を手伝ってもらい、それからプログラム的にWordpressにその項目のすべてをロードすることはできますか?前もって感謝します。

1
Oriol A.

これはあなたが始めるための十分に有効な例です。

「マーカー」分類を登録する

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,
    )
);

この分類法に必要なフィールドを追加/保存するためのフックを追加する必要があります。

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);

この機能は、新しい分類法画面を追加するためのフィールドを追加します

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
}

この機能は分類法の編集画面にフィールドを追加します。

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
}

最後に、この関数は新しい分類法のカスタムフィールド値を保存します

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