Сохранить данные пользовательского метабокса в Wordpress - PullRequest
0 голосов
/ 26 сентября 2011

Я добавил мета-поле на страницу редактирования ссылки, и я не могу сохранить данные, что бы я ни добавил в поле. Как я могу только обновить мета-поле, не сохраняя данные в базе данных? Вот мой код:

// backwards compatible
add_action( 'admin_init', 'blc_add_custom_link_box', 1 ); 

/* Do something with the data entered */
add_action( 'save_link', 'blc_save_linkdata' );

/* Adds a box to the main column on the Post and Page edit screens */
function blc_add_custom_link_box() {
    add_meta_box( 
        'backlinkdiv',
        'Backlink URL',
        'blc_backlink_url_input',
        'link',
        'normal',
        'high'
    );
}

/* Prints the box content */
function blc_backlink_url_input( $post ) {
  // Use nonce for verification
  wp_nonce_field( plugin_basename( __FILE__ ), 'blc_noncename' );

  // The actual fields for data entry
  echo '<input type="text" id="backlink-url" name="backlink_url" value="put your backlink here" size="60" />';

  #echo "<p> _e('Example: <code>http://Example.org/Linkpage</code> &#8212; don&#8217;t forget the <code>http://</code>')</p>";
}

Как я могу сохранить или обновить данные поля ввода metabox? Только данные должны быть обновлены в метабоксе. Не следует сохранять в базе данных какие-либо настраиваемые поля.

Ответы [ 3 ]

4 голосов
/ 27 сентября 2011

Я думаю, что на самом деле было бы неплохо сохранить как настраиваемое поле, только то, которое не отображается в поле настраиваемого поля. Последнее можно сделать, добавив «_» в начале имени настраиваемого поля (то есть «_my_custom_field» вместо «my_custom_field».

Вот пример функции для сохранения данных мета-бокса. Я изменил имена, чтобы они соответствовали приведенному выше коду.

    <?php

    function blc_save_postdata($post_id){

      // Verify this came from the our screen and with proper authorization,
      // because save_post can be triggered at other times
      if ( !wp_verify_nonce( $_POST['blc_noncename'], plugin_basename(__FILE__) )) {
        return $post_id;
      }

      // Verify if this is an auto save routine. If it is our form has not been submitted, so we dont want
      // to do anything
      if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) 
        return $post_id;


      // Check permissions to edit pages and/or posts
      if ( 'page' == $_POST['post_type'] ||  'post' == $_POST['post_type']) {
        if ( !current_user_can( 'edit_page', $post_id ) || !current_user_can( 'edit_post', $post_id ))
          return $post_id;
      } 

      // OK, we're authenticated: we need to find and save the data
      $blc = $_POST['backlink_url'];

      // save data in INVISIBLE custom field (note the "_" prefixing the custom fields' name
      update_post_meta($post_id, '_backlink_url', $blc); 

    }

    //On post save, save plugin's data
    add_action('save_post', array($this, 'blc_save_postdata'));
            ?>

И так и должно быть. Я использовал эту страницу в качестве ссылки: http://codex.wordpress.org/Function_Reference/add_meta_box

0 голосов
/ 03 августа 2016

Вы должны отключить этот код

если (определено ('DOING_AUTOSAVE') && DOING_AUTOSAVE) вернуть $ post_id;

, то, что он блокирует ваш код ниже, потому что он обнаруживает, что вашделать некоторые автосохранения на нем.

0 голосов
/ 26 сентября 2011

Подключите действие save_post - оно получает сохраненный идентификатор сообщения и позволяет вам обновлять сообщение так, как вам нужно при отправке страницы редактора сообщений.Не забывайте, что это действие будет вызываться для КАЖДОГО сохраненного сообщения - вам нужно обрабатывать только сообщения, имеющие ваш собственный мета-блок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...