it-swarm.com.de

Benutzerdefinierte Metabox mit Taxonomie-Dropdown - Problem beim Speichern

Mein Ziel war einfach - einen benutzerdefinierten Beitragstyp mit einer benutzerdefinierten Metabox mit einer einfachen Dropdown-Liste von Taxonomiebegriffen zu erstellen, anstatt die Tags oder Kontrollkästchen zu verwenden. Der Grund war, sicherzustellen, dass der Editor nur einen einzigen Begriff aus der Taxonomieliste auswählen kann.

Nach dem Ausprobieren konnte ich endlich herausfinden, wie ich die hervorragenden Metabox-Erstellungstools von WP-Alchemy (http://farinspace.com/wpalchemy-metabox/) verwenden kann, um meine Metabox zu erstellen und die zutreffende anzuzeigen Begriffe in einer Dropdown-Liste.

Das Problem, das ich habe, ist, dass ich keine neue Auswahl aus dem Dropdown-Menü zum Speichern des ausgewählten Werts erhalten kann.

Um es klar auszudrücken: Es ist wichtig, dass jedem Beitrag in diesem benutzerdefinierten Beitragstyp nur ein einziger Begriff zugeordnet wird. Dies bedeutet, dass immer dann, wenn ein anderer Wert aus dem Dropdown-Menü ausgewählt und der Beitrag gespeichert wird, sichergestellt werden muss, dass die vorherige Auswahl nicht registriert ist.

Wie bereits erwähnt, wird derzeit die Liste der Begriffe in einer Dropdown-Liste und der jeweils zugeordnete Begriff korrekt angezeigt.

Gerade beim Speichern der neuen Werte habe ich Probleme.

Nach umfangreichen Recherchen "scheint" die Lösung darin zu bestehen, die WordPress-Funktionen "wp_set_post_terms" zu verwenden, die hier näher erläutert werden: http://codex.wordpress.org/Function_Reference/wp_set_post_terms Ich bin mir jedoch nicht sicher, wie ich sie richtig verwenden soll um mein gewünschtes ergebnis zu erreichen.

Unten habe ich den Code enthalten, den ich benutze. Es ist sehr wahrscheinlich, dass es einen besseren Weg gibt, und ich würde es begrüßen, wenn alle Vorschläge, die Sie haben, auch sicherstellen könnten, dass die zutreffenden "Überprüfungen" durchgeführt werden, um sicherzustellen, dass Benutzer, die nicht autorisiert sind, keine Daten einfügen können.

FUNCTIONS.PHP-DATEI (ZEIGT DIE ERSTELLUNG DES BENUTZERDEFINIERTEN POST TYPS UND DER TAXONOMIE UNTEN AN.

//////////////////////////////////////////////////////////////////////////////
// CUSTOM POSTTYPE FOR -- SERVICES  
//////////////////////////////////////////////////////////////////////////////

add_action('init', 'services');
function services() {
 register_post_type('services', array(
  'labels' => array(
   'name'   => __('Services'),
   'singular_label'  => __('Service'),
   'new_item'   => __('Add a Service'),
   'add_new'   => __('Add a Service'),
   'add_new_item'  => __('Add a Service'),
   'edit'   => __('Edit Service'),
   'edit_item'   => __('Edit Service'),
   'view'   => __('View Service'),
   'view_item'   => __('View Service'),
   'search_items'  => __('Search Services'),
   'not_found'   => __('No Services Found'),
   'not_found_in_trash' => __('No Services Found in Trash'),
       'parent_item'  => __('Parent Service'),
   'parent_item_colon' => __('Parent Service:')
   ),
  'can_export'    => true,
  'menu_position'   => 7,
  'public'    => false,
  'show_ui'    => true,
  'publicly_queryable'  => true,
  'hierarchical'   => true,
  'query_var'    => true,
  'capability_type'   => 'post',
  'exclude_from_search'  => false,
  'supports' => array(
   'title',
   'editor',
   'revisions',
   'page-attributes'
   ),
  'rewrite' => array( 
   'slug'   => 'disability-services', 
   'with_front'   => false
   )
 ));
}

HIER IS WO ICH DIE TAXONOMIE REGISTRIERE, MIT DER ICH VERSUCHE ZU ARBEITEN

// CUSTOM TAXONOMY METABOX POSTTYPE - AGE GROUPS
   register_taxonomy('theme', array('services'), array(
    'hierarchical'          => false, 
    'singular_label'            => 'Age Group', 
    'query_var'                 => 'theme',
    'public'                => true,
    'show_ui'               => true,
    'show_tagcloud'             => false,
    'show_in_nav_menus'             => true,    
    'rewrite'               => array( 'slug' => 'age-groups', 'with_front' => false ),
    'labels' => array(
        'name'          => __( 'Age Groups' ),
        'singular_name'         => __( 'Age Groups' ),
        'search_items'      => __( 'Search Age Groups' ),
        'all_items'             => __( 'All Age Groups' ),
        'parent_item'       => __( 'Parent Age Group' ),
        'parent_item_colon'         => __( 'Parent Age Group:' ),
        'edit_item'             => __( 'Edit Age Group' ), 
        'update_item'       => __( 'Update Age Group' ),
        'add_new_item'      => __( 'Add Age Group' ),
        'new_item_name'         => __( 'New Name of Age Group' ),
        'popular_items'         => __( 'Popular Age Groups' ),
        'separate_items_with_commas'=> __( 'Separate Age Groups with commas' ),
        'add_or_remove_items'   => __( 'Add or remove Age Groups' ),
        'choose_from_most_used' => __( 'Select Popular Age Groups' ), 
        ),
   ));
   wp_insert_term('Kids', 'theme');
   wp_insert_term('Teens', 'theme');
   wp_insert_term('Adults', 'theme');

DIESES IS DER REST DES CODES, DEN ICH IN DER FUNKTIONSDATEI VERWENDE, UND DER CODE, UM DIE METABOX AUF DER BASIS VON WPALECHEMY ZU ERSTELLEN. Bei diesem Versuch habe ich versucht, 'save_filter' => "wp_set_post_terms ($ post-> ID, 'theme')" einzuschließen, mit der Hoffnung, dass dies die zutreffenden Daten speichern würde, dies jedoch nicht.

// CUSTOM METABOX POSTTYPE - SERVICE DETAILS
   $custom_metabox_service_details = new WPAlchemy_MetaBox(array (
    'id'        => '_service_details-metaboxes',        // underscore prefix hides fields from the custom fields area
    'title'     => 'Age Groups',            // title added automatically to the custom metabox
    'types'     => array('services'),           // added only for custom post type "name-of-post-type" can also be "page" or "post"
    'context'   => 'normal',                    // same as above, defaults to "normal" but can use "advanced" or "side"
    'priority'  => 'high',                  // same as above, defaults to "high" but can use "low" as well
    'mode'  => WPALCHEMY_MODE_EXTRACT,
    'save_filter' => "wp_set_post_terms( $post->ID, 'theme' )",
    'template'  => TEMPLATEPATH . '/admin-metabox/service_details-metaboxes.php'  // contents for the meta box
    ));

ICH SOLLTE AUCH BEACHTEN, DASS DIMAS ÜBER AT WPALECHMEY EINIGEN NEUEN CODE IN SEINE 1.3.2-VERSION VON GITHUB HINZUFÜGEN, IN DENEN DER OBEN GENANNTE CODE A EINSCHLIESSEN KANN

'save_filter' => "custom-function", 

Mit diesem Code können Sie eine benutzerdefinierte Funktion erstellen oder eine benutzerdefinierte Funktion aufrufen, die ausgeführt wird, wenn Sie auf die Schaltfläche "Veröffentlichen" klicken. Ist dies möglicherweise der beste Weg, um die Daten zu speichern?

In jedem Fall verwende ich den folgenden Code für die benutzerdefinierte Metabox, um die aktuelle Dropdown-Liste mit den Taxonomiebedingungen anzuzeigen.

<?php 
// This function gets called in edit-form-advanced.php
echo '<input type="hidden" name="taxonomy_noncename" id="taxonomy_noncename" value="' . wp_create_nonce( 'taxonomy_theme' ) . '" />';

// Get all theme taxonomy terms
$themes = get_terms('theme', 'hide_empty=0'); 
?>

<select name='post_theme' id='post_theme'>
// DISPLAY TERMS AS DROP DOWN OPTIONS
<?php $names = wp_get_object_terms($post->ID, 'theme'); ?>
<option class='theme-option' value='' <?php if (!count($names)) echo "selected";?>>None</option>
<?php foreach ($themes as $theme) {
 if (!is_wp_error($names) && !empty($names) && !strcmp($theme->slug, $names[0]->slug)) 
 echo "<option class='theme-option' value='" . $theme->slug . "' selected>" . $theme->name . "</option>\n"; 
 else
 echo "<option class='theme-option' value='" . $theme->slug . "'>" . $theme->name . "</option>\n"; 
}
?>
</select>

Ich gehe davon aus, dass das Speichern der Daten ein Kinderspiel sein sollte, aber ich bin mir nicht sicher, wie ich das erreichen soll.

Wie bereits erwähnt, würde ich es begrüßen, wenn Sie auch Vorschläge zum Code machen könnten, um sicherzustellen, dass alle erforderlichen Überprüfungen durchgeführt werden, um sicherzustellen, dass die Daten korrekt gespeichert werden und nur die korrekt autorisierten Personen sind.

Muss mich im Voraus bedanken!

3

Für alle, die interessiert sind, habe ich diese Frage in einem anderen Beitrag beantwortet:

Taxonomie-Begriffe speichern

1