Respuestas WordPress

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

Recoger PATH genérico para no hardcodear la dirección

He realizado un Plugin y a la hora de subirlo al repositorio oficial de Wordpress entre otras cosas he recibido este mensaje:

When you hardcode in paths, or assume that everyone has WordPress in the root of their domain, you cause anyone using 'Giving WordPress it's own directory' (a VERY common setup) to break. In addition, WordPress allows users to change the name of wp-content, so you would break anyone who choses to do so.

Please review http://codex.wordpress.org/Determining_Plugin_and_Content_Directories and update your plugin accordingly. And don't worry about supporting WordPress 2.x or lower. We don't encourage it nor expect you to do so, so save yourself some time and energy.

Example:

  if( suwp_pathname == 'wp-admin' ) {
    doc_pathname = '/wp-admin/admin-ajax.php';
    } else {
    doc_pathname = '/' + suwp_pathname + '/wp-admin/admin-ajax.php';
    }

Pensaba que mi código era correcto pero parece que hardcodeo la dirección y no se como realizarlo de forma correcta.

Los ficheros afectados pueden ser polr.php y polr.js (No se si hay que realizar cambios en los dos o con el js sería suficiente).

Parte de polr.php

function polr_init() {

    wp_register_script( 'polr-js', plugins_url( '/polr.js', __FILE__ ), array('jquery') );

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

    global $post;
    $post_id = $post->ID;
    wp_localize_script('polr-js', 'MyAjax', array(
      'post_id' => $post_id,
      'action'=> 'polr_get_url' 
    ));
}
add_action( 'add_meta_boxes', 'polr_init' );

polr.js

jQuery(document).ready(function($) {
    jQuery("#button_polr_get_url").click(function(){
      var doc_pathname = '';
      var suwp_pathname = document.location.pathname.split('/')[1];

      // add the path element, if necessary

      if( suwp_pathname == 'wp-admin' ) {
        doc_pathname = '/wp-admin/admin-ajax.php';
        } else {
        doc_pathname = '/' + suwp_pathname + '/wp-admin/admin-ajax.php';
        }

    var url = document.location.protocol + '//' + document.location.host + doc_pathname;
    jQuery.ajax({
            type: 'POST',
            url: url,
            dataType: 'text',

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

1 Respuesta

2votos

Puntos0

He encontrado la siguiente solución.

Añadir la siguiente linean en el php

$ajax_path = esc_url(admin_url('admin-ajax.php'));

Y en el js esta otra:

var url = MyAjax.ajax_path;

Con lo cual los ficheros quedan de la siguiente manera:

polr.php

function polr_init() {

    wp_register_script( 'polr-js', plugins_url( '/polr.js', __FILE__ ), array('jquery') );

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

    global $post;
    $post_id = $post->ID;
        $ajax_path = esc_url(admin_url('admin-ajax.php'));
    wp_localize_script('polr-js', 'MyAjax', array(
      'post_id' => $post_id,
      'action'=> 'polr_get_url', 
            'ajax_path'=> $ajax_path
    ));
}
add_action( 'add_meta_boxes', 'polr_init' );

polr.js

jQuery(document).ready(function($) {
    jQuery("#button_polr_get_url").click(function(){

    var url = MyAjax.ajax_path;
    jQuery.ajax({
            type: 'POST',
            url: url,
            dataType: 'text',

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

0voto

Peter comentado

Si esta es la solución por favor selecciona la respuesta como correcta.

Saludos.

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

Otras Preguntas y Respuestas


Podcasts WordPress


...
Respuestas WordPress es un espacio de Preguntas y Respuestas entre usuarios WordPress.

Conecta