it-swarm.com.de

Benötigen Sie Hilfe beim Hinzufügen eines eigenen Feldes zur Kategorie?

Ich versuche, ein benutzerdefiniertes Feld für Kategorien hinzuzufügen. Das benutzerdefinierte Feld ist ein einzelnes Kontrollkästchen. Ich kann das Kontrollkästchen in den Formularen in der Kategorie erstellen und Kategorieseiten bearbeiten anzeigen lassen, aber wenn ich das Kontrollkästchen aktiviere, bleibt es nach dem Speichern des Formulars nicht aktiviert.

Dies ist der Code, den ich verwende:

/*  Custom Field for Categories.
    ======================================== */

//Add new page

function my_taxonomy_add_meta_fields( $taxonomy ) {
    ?>
    <div class="form-field term-group">
        <label for="show_category"><?php _e( 'Show Category', 'codilight-lite' ); ?></label>
        <input type="checkbox" id="show_category" name="show_category" />
    </div>
    <?php
}
add_action( 'category_add_form_fields', 'my_taxonomy_add_meta_fields', 10, 2 );

//Edit term page

function my_taxonomy_edit_meta_fields( $term, $taxonomy ) {
    $show_category = get_term_meta( $term->term_id, 'show_category', true );
    ?>
    <tr class="form-field term-group-wrap">
        <th scope="row">
            <label for="show_category"><?php _e( 'Show Category', 'codilight-lite' ); ?></label>
        </th>
        <td>
            <input type="checkbox" id="show_category" name="show_category" value="<?php echo $show_category; ?>" />
        </td>
    </tr>
    <?php
}
add_action( 'category_edit_form_fields', 'my_taxonomy_edit_meta_fields', 10, 2 );

//Save custom meta

function my_taxonomy_save_taxonomy_meta( $term_id, $tag_id ) {
    if( isset( $_POST['show_category'] ) ) {
        update_term_meta( $term_id, 'show_category', esc_attr( $_POST['show_category'] ) );
    }
}
add_action( 'created_category', 'my_taxonomy_save_taxonomy_meta', 10, 2 );
add_action( 'edited_category', 'my_taxonomy_save_taxonomy_meta', 10, 2 );

Ich habe diesen Code aus einem Tutorial kopiert, das ich gefunden habe. Der ursprüngliche Code war für ein benutzerdefiniertes Feld vom Typ Textfeld. Ich denke, das Problem hat wahrscheinlich mit den Einstellungen der Kontrollkästchen zu tun.

3
jrcollins

Kontrollkästchen unterscheiden sich ein wenig von Texteingaben. Die wichtigsten Änderungen betreffen die Speicherfunktion und die Behandlung des Attributs checked. Der Wert von show_category ist yes , wenn es markiert ist, oder eine leere Zeichenfolge, die nicht markiert ist.

Denken Sie daran, dass show_category-Metas, die noch nie gespeichert wurden, nicht gesetzt werden. Berücksichtigen Sie dies in Ihrem Code.

/*  Custom Field for Categories.
    ======================================== */

// Add new term page
function my_taxonomy_add_meta_fields( $taxonomy ) { ?>
    <div class="form-field term-group">
        <label for="show_category">
          <?php _e( 'Show Category', 'codilight-lite' ); ?> <input type="checkbox" id="show_category" name="show_category" value="yes" />
        </label>
    </div><?php
}
add_action( 'category_add_form_fields', 'my_taxonomy_add_meta_fields', 10, 2 );

// Edit term page
function my_taxonomy_edit_meta_fields( $term, $taxonomy ) {
    $show_category = get_term_meta( $term->term_id, 'show_category', true ); ?>

    <tr class="form-field term-group-wrap">
        <th scope="row">
            <label for="show_category"><?php _e( 'Show Category', 'codilight-lite' ); ?></label>
        </th>
        <td>
            <input type="checkbox" id="show_category" name="show_category" value="yes" <?php echo ( $show_category ) ? checked( $show_category, 'yes' ) : ''; ?>/>
        </td>
    </tr><?php
}
add_action( 'category_edit_form_fields', 'my_taxonomy_edit_meta_fields', 10, 2 );

// Save custom meta
function my_taxonomy_save_taxonomy_meta( $term_id, $tag_id ) {
    if ( isset( $_POST[ 'show_category' ] ) ) {
        update_term_meta( $term_id, 'show_category', 'yes' );
    } else {
        update_term_meta( $term_id, 'show_category', '' );
    }
}
add_action( 'created_category', 'my_taxonomy_save_taxonomy_meta', 10, 2 );
add_action( 'edited_category', 'my_taxonomy_save_taxonomy_meta', 10, 2 );
2
Dave Romsey