WordPress – WP REST API v2, CRUD usuarios con Jquery Ajax

Para crear, leer, actualizar y eliminar usuarios de WordPress (Create, Read, Update y Delete) usando la WP REST API v2 desde un script Jquery Ajax procedemos a:

  • En el documento Html creamos los botones que harán la llamada a Jquery Ajax:
  • <a href="#" id="create" class='btn btn-info'>Create</a>
    <a href="#" id="read" class='btn btn-info'>Read</a>
    <a href="#" id="update" class='btn btn-info'>Update</a>
    <a href="#" id="delete" class='btn btn-info'>Delete</a>
    
  • En el script agregamos la función de encriptación base64:
  • /**
    *
    *  Base64 encode / decode
    *  http://www.webtoolkit.info/
    *
    **/
    var Base64 = {
    
    // private property
    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
    
    // public method for encoding
    encode : function (input) {
        var output = "";
        var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
        var i = 0;
    
        input = Base64._utf8_encode(input);
    
        while (i < input.length) {
    
            chr1 = input.charCodeAt(i++);
            chr2 = input.charCodeAt(i++);
            chr3 = input.charCodeAt(i++);
    
            enc1 = chr1 >> 2;
            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
            enc4 = chr3 & 63;
    
            if (isNaN(chr2)) {
                enc3 = enc4 = 64;
            } else if (isNaN(chr3)) {
                enc4 = 64;
            }
    
            output = output +
            this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
            this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
    
        }
    
        return output;
    },
    
    // public method for decoding
    decode : function (input) {
        var output = "";
        var chr1, chr2, chr3;
        var enc1, enc2, enc3, enc4;
        var i = 0;
    
        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    
        while (i < input.length) {
    
            enc1 = this._keyStr.indexOf(input.charAt(i++));
            enc2 = this._keyStr.indexOf(input.charAt(i++));
            enc3 = this._keyStr.indexOf(input.charAt(i++));
            enc4 = this._keyStr.indexOf(input.charAt(i++));
    
            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;
    
            output = output + String.fromCharCode(chr1);
    
            if (enc3 != 64) {
                output = output + String.fromCharCode(chr2);
            }
            if (enc4 != 64) {
                output = output + String.fromCharCode(chr3);
            }
    
        }
    
        output = Base64._utf8_decode(output);
    
        return output;
    
    },
    
    // private method for UTF-8 encoding
    _utf8_encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";
    
        for (var n = 0; n < string.length; n++) {
    
            var c = string.charCodeAt(n);
    
            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }
    
        }
    
        return utftext;
    },
    
    // private method for UTF-8 decoding
    _utf8_decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;
    
        while ( i < utftext.length ) {
    
            c = utftext.charCodeAt(i);
    
            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }
    
        }
    
        return string;
    }
    }
    
  • Además agregamos en el script las llamadas Ajax para Create, Read, Update y Delete:
  • $(document).ready(function(){
        // Create
        $('#create').click(function(e) 
        {        
            $.ajax({
                url: 'https://midominio.com/wp-json/wp/v2/users',
                type: 'POST',
                crossDomain: true,
                beforeSend: function ( xhr ) {
                    xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( 'usuario:password' ) );
                },
                data: {username: 'pedroperez', password : 'pedro123', email : 'pedro@gmail.com', first_name : 'Pedro', last_name : 'Pérez'},
                success: function( data, txtStatus, xhr ) {
                    console.log( data.username );
                    console.log( xhr.status );
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    console.log(xhr.status);
                    console.log(thrownError);
                }
            }); 
        });
    
        // Read
        $('#read').click(function(e) 
        {
            $.ajax({
                url: 'https://midominio.com/wp-json/wp/v2/users/10',
                type: 'GET',
                crossDomain: true,
                beforeSend: function ( xhr ) {
                    xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( 'usuario:password' ) );
                },
                    success: function( data, txtStatus, xhr ) {
                    console.log( data.name );
                    console.log( data);
                    console.log( xhr.status );
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    console.log(xhr.status);
                    console.log(thrownError);
                }
            });
        ;});
    
        // Update
        $('#update').click(function(e) 
        {
            $.ajax({
                url: 'https://midominio.com/wp-json/wp/v2/users/10',
                type: 'PUT',
                crossDomain: true,
                beforeSend: function ( xhr ) {
                    xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( 'usuario:password' ) );
                },
                data: {name: 'Pedro Santaella'},
                success: function( data, txtStatus, xhr ) {
                    console.log( data.username );
                    console.log( xhr.status );
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    console.log(xhr.status);
                    console.log(thrownError);
                }
            });
        });
    
        // Delete 
        $('#delete').click(function(e) 
        {
            $.ajax({
                url: 'https://midominio.com/wp-json/wp/v2/users/10',
                method: 'DELETE',
                crossDomain: true,
                beforeSend: function ( xhr ) {
                    xhr.setRequestHeader( 'Authorization', 'Basic ' + Base64.encode( 'usuario:password' ) );
                },
                data: {force : 'true', reassign : 1},
                success: function( data, txtStatus, xhr ) {
                    console.log( data );
                    console.log( xhr.status );
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    console.log( xhr.status );
                    console.log( thrownError );
                }
            });     
        });
    });
    
  • En la operación Delete se deben pasar en la variable data los parámetros: 'force' : true y 'reassign' : idDelUsuarioAlCualSeLeAsignaranLosPostDelUsuarioQueSePretendeEliminar

WordPress – Cambiar el texto de Página no encontrada 404

Los temas de WordPress generalmente tienen una página personalizada en caso de error 404. Para cambiar el texto del mensaje:

  • Accede al administrador de archivo (cpanel) de tu sitio web.
  • Como previsión haz un respaldo de todo tu sitio web.
  • Desplázate hasta el directorio /wp-content/themes/NombreDelTemaActivoDeTuSitioWeb.
  • Busca algún archivo que tenga un nombre parecido a 404.html.
  • Abre el archivo en modo de edición.
  • Asegúrate que en el modo de edición el archivo tenga la configuración «UTF-8».
  • Sustituye el mensaje que deseas que el usuario vea, cuando no se encuentre la página.
  • Si deseas colocar alguna condición de acuerdo con el valor que contegan las variables de Apache (REDIRECT_URL, REQUEST_URI y REDIRECT_STATUS) puedes hacerlo usando PHP. Ejemplo:
  • <?php if (substr($_SERVER['REQUEST_URI'], 1 , 3) == 'sln'): ?>
    <p>Bla, bla, bla</p>
    <?php else: ?>
    <p>Bla, bla, bla</p>
    <?php endif; ?>
    
  • Guarda el archivo y prueba

WordPress – Instalar WordPress en un subdirectorio

  • Movemos los archivos de WordPress al subdirectorio
  • Accedemos al escritorio de WordPress, vamos a «Ajustes» -> «Generales», en «Dirección de WordPress (URL) escribimos:

 

http://localhost/nombreDelDirectorioPrincipal/nombreDelSubdirectorio
  • Y en Dirección del sitio (URL) tipeamos:

 

http://localhost/nombreDelDirectorioPrincipal
  • Copiamos el archivo index.php que se encuentra en el subdirectorio al directorio principal
  • En ese archivo index.php cambiamos «/wp-blog-header.php» por «/nombreDelSubdirectorio/wp-blog-header.php»
  • Accedemos al escritorio de WordPress a «Ajuste» -> «Enlaces permanentes» y pulsa el botón «Guardar»

Fuente: https://blog.doominio.com/como-tener-wordpress-funcionando-en-el-directorio-principal-de-tu-web/

WordPress – Solicita usuario ftp para instalar plugin

Si WordPress solicita usuario ftp para instalar un plugin debemos hacer lo siguiente:

  • Desde la línea de comandos dar permisos recursivos de lectura, escritura y ejecución a la carpeta wp-content:
chmod -R ugo+rwx wp-content
  • Agregar al final del archivo wp-config.php las siguientes lineas:
/*** FTP login ***/
define("FTP_HOST", "host-ftp");
define("FTP_USER", "nombre-usuario-ftp");
define("FTP_PASS", "password-ftp");
/*** Definir FS_METHOD en WordPress para actualizar de manera automatica sin FTP ***/
define("FS_METHOD","direct");

Fuente: https://lmgeek.wordpress.com/2016/06/10/wordpress-te-pide-datos-ftp-para-actualizar-o-instalar-algun-plugin-o-plantilla/