el-cultivo / cltvo-blank-wptheme

Configuración básica para cualquier tema desarrollado por El Cultivo
2 stars 0 forks source link

Separar la validación en CltvoSaveMetaValue() #2

Closed bbbiiiaaa closed 4 years ago

bbbiiiaaa commented 8 years ago

Creo que esto debería ser un método separado:

if( !current_user_can('edit_post', $id) ) return $id;

// Vs Autosave
if( defined('DOING_AUTOSAVE') AND DOING_AUTOSAVE ) return $id;
if( wp_is_post_revision($id) OR wp_is_post_autosave($id) ) return $id;

Así podríamos sobre escribir el método CltvoSaveMetaValue, pero que siempre se validen esos datos.

Además como parte de la validación del guardado de la info deberíamos hacer uso de los "Nonces" de WP: https://codex.wordpress.org/WordPress_Nonces

bbbiiiaaa commented 8 years ago

...podría quedar algo así:

  /**
   * Guarda el valor del metabox
   */
  public function CltvoSaveMetaValue(){

    add_action( 'save_post', function($id){

      if( $this->CltvoValidateBeforeSave($id) ) {
          update_post_meta( $id, get_called_class() , $_POST[ get_called_class() ] );
      }

    });
  }

  /**
   * Hace las validaciones necesarias antes de efectivamente guarda los meta datos.
   */
  public function CltvoValidateBeforeSave($id){
    if( !current_user_can('edit_post', $id) ) return false;
    if( defined('DOING_AUTOSAVE') AND DOING_AUTOSAVE ) return false;
    if( wp_is_post_revision($id) OR wp_is_post_autosave($id) ) return false;

    // Aquí pondría el Nonce.

    if( !isset( $_POST[ get_called_class() ] ) ) return false;
    return true;
  }
}
fectda commented 8 years ago

ya quedo el cambio pero no creo que sirva de algo utilizar los nonce en esta parte, ya que estamos salvando por medio del save post de wp

fectda commented 8 years ago

finalmente quedo así

    /**
     * guarda el valor del metabox
     */
    final public function CltvoSaveHook(){

        add_action( 'save_post', function($id){

            if( !current_user_can('edit_post', $id) ) return $id;
            if( defined('DOING_AUTOSAVE') AND DOING_AUTOSAVE ) return $id;
            if( wp_is_post_revision($id) OR wp_is_post_autosave($id) ) return $id;

        // ---------------------- salva el meta box ----------------------
            if( isset( $_POST[ get_called_class() ] ) ) {
                $this->CltvoSaveMetaValue($id);
            }

        } ); // guarda el valor de las metabox
    }

    /**
     * Hace las validaciones necesarias antes de efectivamente guarda los meta datos.
     */
    public function CltvoSaveMetaValue($id){
        update_post_meta( $id, get_called_class() , $_POST[ get_called_class() ] );
    }