it-swarm.com.de

Dynamisches Erstellen und Aktualisieren von benutzerdefinierten Posts

Ich erstelle ein Plugin, das einen benutzerdefinierten Beitragstyp verwendet. Meine Frage ist zweifach:

(1) Wie erstelle ich bei Aktivierung meines Plugins die Artikel meiner benutzerdefinierten Beitragstypen? Zum Beispiel: Wenn mein Beitragstyp "Beste Restaurants" lautete. Ich möchte 10 benutzerdefinierte Beitragstypen erstellen, da mein Plugin diese Informationen benötigt. Wie würde ich das machen? Gibt es eine Funktion, die ich verwenden kann, um einen Beitrag zusammen mit seinen benutzerdefinierten Daten hinzuzufügen?

und (2) Wenn mein Plugin aktualisiert wird, sagen wir, ich habe eine neue Version veröffentlicht. Wie kann ich diese Liste am besten ändern? Ich dachte daran, alle Elemente mit einem bestimmten Post-Typ zu löschen und dann die neuen einzufügen, aber das könnte übertrieben sein.

Danke im Voraus.

1
rexposadas

Ja, @wyrfel ist richtig. Sie verwenden wp_insert_post(), um Ihre Beiträge zu erstellen. Anhand Ihres Beispiels für 50 US-Bundesstaaten habe ich einen Code erstellt, den Sie in den functions.php Ihres Themas einfügen können, um zu sehen, wie er funktioniert (obwohl Sie add_states_if_not_yet_added() wahrscheinlich nicht für jedes Laden einer Seite aufrufen möchten, aber das Beispiel ist einfacher zu zeigen):

<?php 

add_action('init','init_us_states');
function init_us_states() {
  register_us_states_post_type();
  add_states_if_not_yet_added();
}
function add_states_if_not_yet_added() {
  foreach(get_50_us_states() as $state_code => $state_name) {
    if (!get_page_by_path($state_code,OBJECT,'us-state'))
      wp_insert_post(array(
        'post_type'       => "us-state",
        'post_content'    => "Information about {$state_name}",
        'post_title'      => $state_name, // i.e. 'Georgia'
        'post_name'       => $state_code, // i.e. 'GA'; this is for the URL
        'post_status'     => "publish",
        'comment_status'  => "closed",
        'ping_status'     => "closed",
        'post_parent'     => "0",
      ));
  }
}
function register_us_states_post_type() {
  register_post_type('us-state',array(
      'labels' => array(
      'name' => _x('States', 'post type general name'),
      'singular_name' => _x('State', 'post type singular name'),
      'add_new' => _x('Add New', 'us-state'),
      'add_new_item' => __('Add New State'),
      'edit_item' => __('Edit State'),
      'new_item' => __('New State'),
      'view_item' => __('View State'),
      'search_items' => __('Search States'),
      'not_found' =>  __('No States found'),
      'not_found_in_trash' => __('No States found in Trash'),
      'parent_item_colon' => '',
      'menu_name' => 'States'
    ),
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'query_var' => true,
    'rewrite' => array('slug'=>'states'),
    'capability_type' => 'post',
    'has_archive' => 'states',
    'hierarchical' => false,
    'supports' => array('title','editor','author','thumbnail','excerpt')
  ));
}
function get_50_us_states() {
  return array(
    'AL' => 'Alabama',
    'AK' => 'Alaska',
    'AZ' => 'Arizona',
    'AR' => 'Arkansas',
    'CA' => 'California',
    'CO' => 'Colorado',
    'CT' => 'Connecticut',
    'DE' => 'Delaware',
    'FL' => 'Florida',
    'GA' => 'Georgia',
    'HI' => 'Hawaii',
    'ID' => 'Idaho',
    'IL' => 'Illinois',
    'IN' => 'Indiana',
    'IA' => 'Iowa',
    'KS' => 'Kansas',
    'KY' => 'Kentucky',
    'LA' => 'Louisiana',
    'ME' => 'Maine',
    'MD' => 'Maryland',
    'MA' => 'Massachusetts',
    'MI' => 'Michigan',
    'MN' => 'Minnesota',
    'MS' => 'Mississippi',
    'MO' => 'Missouri',
    'MT' => 'Montana',
    'NE' => 'Nebraska',
    'NV' => 'Nevada',
    'NH' => 'New Hampshire',
    'NJ' => 'New Jersey',
    'NM' => 'New Mexico',
    'NY' => 'New York',
    'NC' => 'North Carolina',
    'ND' => 'North Dakota',
    'OH' => 'Ohio',
    'OK' => 'Oklahoma',
    'OR' => 'Oregon',
    'PA' => 'Pennsylvania',
    'RI' => 'Rhode Island',
    'SC' => 'South Carolina',
    'SD' => 'South Dakota',
    'TN' => 'Tennessee',
    'TX' => 'Texas',
    'UT' => 'Utah',
    'VT' => 'Vermont',
    'VA' => 'Virginia',
    'WA' => 'Washington',
    'WV' => 'West Virginia',
    'WI' => 'Wisconsin',
    'WY' => 'Wyoming',
  );
}

Und hier sind einige Screenshots, die zeigen, wie es funktioniert:

WordPress 3.1 post type page for a US StateList of US States on a WordPress 3.1 archive pageList of US State post types in the WordPress 3.1 admin

2
MikeSchinkel

Für (1): benutze wp_insert_post().

Zu (2): Eine Idee wäre, die Posts wie oben einzufügen und die Insert-IDs in einem Array zu speichern. Speichern Sie dann das Array als Option. Lesen Sie beim Aktualisieren die Option und führen Sie 'wp_update_post ()' für diese zehn Posts aus, deren ID Sie jetzt haben.

0
wyrfel