entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Ejecutar acción al pulsar un botón en el admin de Wordpress

Hola,

El siguiente código (labur.php) funciona a la perfección y hace lo siguiente:

  1. Cuando el usuario entra a editar/crear un post mediante el admin de Wordpress se ejecuta la acción labur_init.
  2. Labur_init registar un fichero js (labur.js), recoge la url del post y crea un objeto con los datos para enviar a el fichero js.
  3. El fichero labur.js recoge los datos y los muestra en un imput del admin.

Parte del Código de labur.php

<?php

//load external files
add_action( 'add_meta_boxes', 'labur_init' ); 

// add admin settings
add_action('wp_ajax_labur_get_url', 'labur_get_url_process'); // El prefijo wp_ajax es por convención de wordpress

// Función para procesar el AJAX
function labur_get_url_process() {

  // Esta función ahora no hace nada. 
  // Lo ideal sería que esta función fuese la encargada de 
  // recoger la url del post y crear el objeto para enviarlo a labur.js
  exit();
}

/**
 * load external files
 */
function labur_init() {
    //register plugin js file. Jquery is a requirement for this script so we specify it
    wp_register_script( 'labur-js', plugins_url( '/labur.js', __FILE__ ), array('jquery') ); 

    //load scripts
    wp_enqueue_script('jquery'); 
    wp_enqueue_script('labur-js'); 

    // Recogemos toda la información del post
    global $post;
    // currently edited post id
    $post_uri = $GET['post'];
    wp_localize_script('labur-js', 'MyAjax', array(
      'aldakur_url' => get_permalink($post_uri),
      'action'=> 'labur_get_url' // labur_get_url es la acción pero sin el prefijo wp_ajax. Esta acción ejecutará la función labur_get_url_process
    )); 
}

?>

Código de JS labur.js

jQuery(document).ready(function($) {
    $('#button_labur_get_url').click(function(e) { 

        $.post(document.location.protocol+'//'+document.location.host+'/aldakurnet/wp-admin/admin-ajax.php', MyAjax, function(response) { 
            $('#labur_shortened_url').val(MyAjax.aldakur_url);

        });
    });
});

El problema es que tal y como funciona ahora, la url del post se agarra cuando se agregan los metabox add_action( 'add_meta_boxes', 'labur_init' ); y yo quiero que la dirección se agarre y se llame al fichero js cuando el usuario clique en un botón definido en el fichero labur.php. (para facilitar la lectura del post no he colocado el código del botón.)

1 Respuesta

1voto

gerko23 Puntos1890

Hola podrias poner una variable directa en JS, al llamar el boton duespes de el click cambia el permalink para JS, y setealo desde ahi el permalink por si solo tambien te devuelve la url del post actual puedes combinarlo con el site_url();

egoitz_gonzalez comentado Abr 12

Creo que he realizado lo que me comentas. Desde el JS llamo a una función llamada labur_get_url_process alojada en labur.js que a su vez devuelve la url actual del post. Pero aquí no funciona bien. dentro de labur_get_url_process tengo esto:

function labur_get_url_process() {
    // Recogemos toda la información del post
    global $post;
    $uri =get_permalink($post->ID);
    echo $uri;
}

pero el valor de $uri es 0

gerko23 comentado Abr 17

la funcion get_permalink(), no nesecita de $post->ID, si la pones limpia devolvera la pocision actual en el post que esta trabajando, puede que al moverse de archivo el $post->ID se quede vacio, en cambio solo el get_permalink(); recoge la posicion "actual" en que se esta ejecutando ojo que solo te devuelve "nombre del post o ID", como lo estes mostrando en tu url

egoitz_gonzalez comentado Abr 21

Pero, el problema que tengo es que no sé por que motivo dentro de la función labur_get_url_process no funcionan los métodos. get_permalin() tampoco devuelve nada

egoitz_gonzalez comentado Abr 24

Al final lo he conseguido utilizando isset

Así queda el código funcionando correctamente:

/**
 * load external files
 */
function labur_init() {
    //register plugin js file. Jquery is a requirement for this script so we specify it
    wp_register_script( 'labur-js', plugins_url( '/labur.js', __FILE__ ), array('jquery') ); // labur-js es el nombre para referirnos después al fichero labur.js Como el identificador. jquery es el requisito de mi js

    //load scripts
    wp_enqueue_script('jquery'); // Cargando jquery que es un requisito para mi labur.js
    wp_enqueue_script('labur-js'); // cargo mi fichero labur.js que al registrar lo he identificado como labur-js

    global $post;
    $post_id = $post->ID;
    wp_localize_script('labur-js', 'MyAjax', array(
      'post_id' => $post_id,
      'action'=> 'labur_get_url' // labur_get_url es la acción pero sin el prefijo wp_ajax. Esta acción ejecutará la función labur_get_url_process
    ));

}
// Función para procesar el AJAX
function labur_get_url_process() {
    // Recogemos toda la información del post
    if(isset($_POST['postID']))
    {
    $post_id = $_POST['postID'];
    $post_url = get_permalink($post_id);
    $api_key = get_option('labur_dashboard_title');
    $shortenedurl = file_get_contents('https://labur.eus/api/v2/action/shorten?key='.$api_key.'&url='.$post_url.'&is_secret=false');
    echo $shortenedurl;
    }

    exit();
}

El js sería el siguiente:

jQuery(document).ready(function($) {
    jQuery("#button_labur_get_url").click(function(){
    var url = document.location.protocol+'//'+document.location.host+'/aldakurnet/wp-admin/admin-ajax.php';
    jQuery.ajax({
            type: 'POST',
            url: url,
            dataType: 'text',

            data: {
                postID: MyAjax.post_id, // PHP-tik
                action: MyAjax.action // PHP-tik
            },
            success: function(data, textStatus, XMLHttpRequest){
                $('#labur_shortened_url').val(data);
            },
            error: function(MLHttpRequest, textStatus, errorThrown){
                alert(errorThrown);
            }
        });
    });
});

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta