it-swarm-eu.dev

Vlastní Metabox s rozdělením Taxonomy - Saving Issue

Můj cíl byl jednoduchý --- vytvořit vlastní typ příspěvku s vlastním metaboxem s jednoduchým rozevíracím seznamem termínů taxonomie namísto použití značek nebo zaškrtávacích políček. Důvodem bylo zajistit, aby editor mohl vybrat pouze jeden termín ze seznamu taxonomií.

Po pokusu a omylu jsem se konečně podařilo přijít na způsob, jak využít vynikající nástroje pro tvorbu metaboxů, které používám od společnosti WP-Alchemy (http://farinspace.com/wpalchemy-metabox/), a vytvořit tak metabox. v rozevíracím seznamu.

Problém, který mám, je, že nemůžu dostat nový výběr z rozevírací nabídky pro uložení vybrané hodnoty.

Aby bylo jasné, že je důležité, aby s každým příspěvkem v tomto typu vlastního příspěvku byl spojen pouze jeden výraz, což znamená, že kdykoli je z rozevírací nabídky vybrána jiná hodnota a příspěvek je uložen, je třeba zajistit, aby byl předchozí výběr neregistrovaný.

Jak již bylo zmíněno, v současné době ho zobrazuji seznamem termínů v rozevíracím seznamu a také ho správně zobrazuji bez ohledu na termín, který by mohl být spojen.

Právě ukládání nových hodnot je tam, kde mám problémy.

Z rozsáhlého výzkumu se "zdá", jako je řešení, spočívá v použití funkcí wordpress "wp_set_post_terms", které jsou dále vysvětleny zde: http://codex.wordpress.org/Function_Reference/wp_set_post_terms Nicméně si nejsem jistý, jak je správně používat dosáhnout mého požadovaného výsledku.

Níže jsem zahrnul kód, který používám. Je velmi možné, že je to lepší a ocenil bych jakékoli návrhy, které byste mohli také zajistit, aby byly provedeny příslušné kontroly, aby uživatelé nemohli vkládat údaje, které nejsou autorizovány.

FUNKCE.PHP SOUBOR (ZOBRAZUJE VYTVOŘENÍ ZÁKAZNÍKA POST TYP A TAXONOMIE PODLE.

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

ZDE IS KDE JSEM REGISTROVAT TAXONOMII, KTERÁ JSEM PRACUJEM

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

TENTO IS PŘIPOMÍNAČ KÓDU, KTERÝ SE POUŽÍVÁ V FUNKCÍCH SOUBORU A KÓDU, KTERÝM SE VYTVOŘÍ METABOX NA ZÁKLADĚ WPALECHEMIE. V tomto pokusu jsem se pokusil zahrnout 'save_filter' => "wp_set_post_terms ($ post-> ID, 'theme')", s nadějí, že by to zachránilo použitelná data, ale ne.

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

Měl bych také poznamenat, že DIMAS OVER AT WPALECHMEY PŘIJAL NĚKTERÝ NOVÝ KÓD DO JEHO 1.3.2 VERZE GITHUBU, KTERÝM MŮŽE ZAHRNIT KÓD NA VSTUP

'save_filter' => "custom-function", 

Tento kód vám umožní vytvořit vlastní funkci, nebo myslím, že volání vlastní funkce, která se provede po stisknutí tlačítka publikování, takže možná je to nejlepší způsob, jak uložit data?

V každém případě používám následující kód pro vlastní metabox, aby se zobrazil aktuální rozevírací seznam zobrazující výrazy taxonomie.

<?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>

Předpokládám, že ukládání dat by mělo být jednoduché jako koláč, ale myslím, že jsem si matoucí na tom, jak toho dosáhnout.

Jak již bylo zmíněno, ocenil bych, kdybyste také mohli podat návrhy na kód, aby bylo zajištěno, že budou provedeny nezbytné kontroly, které zajistí správné uložení dat a pouze řádně oprávněných osob.

Musím předem poděkovat!

3

Pro všechny, kdo mají zájem, jsem na tuto otázku odpověděl na jiném místě:

Uložení podmínek taxonomie

1