Обновление пользовательской мета-записи с помощью ajax

Эта функция AJAX вызывается по щелчку:

$.ajax({
            url: 'site/ajax.php',
            data: {id: $('section#single article input:last-of-type').attr('value'), cote: 'like'}
        }).done(function(html) {}

Он передает идентификатор поста (который содержится в скрытом вводе) для функции get_post_meta (), которая находится в ajax.php. Вот как выглядит AJAX.php:

$cote = get_post_meta($_GET['id'], 'cote', true);
if($_GET['cote'] == 'like') {
    $newCote = $cote++;
    update_post_meta($_GET['id'], 'cote', $newCote);
} else {
    $newCote = $cote--;
    update_post_meta($_GET['id'], 'cote', $newCote);
}

Предполагается обновить поле «cote» пользовательского сообщения, но проблема в том, что функция get_post_meta () не определена в ajax.php. Это сообщение об ошибке:

Fatal error: Call to undefined function get_post_meta() in /home2/electro/public_html/beta... on line 2

Понравилась статья? Поделиться с друзьями:
WPAsk
Ответов: 1
  1. s_ha_dum

    Если вы загрузите файл напрямую, ни одна из функций WordPress не будет работать. Вот почему вы почти всегда должны использовать AJAX API. AJAX API решает эту проблему. Все загружается в контексте WordPress.

    function my_ajax_cb_wpse_108143() {
        $cote = get_post_meta($_POST['id'], 'cote', true);
        if($_POST['cote'] == 'like') {
            $newCote = $cote++;
            update_post_meta($_POST['id'], 'cote', $newCote);
        } else {
            $newCote = $cote--;
            update_post_meta($_POST['id'], 'cote', $newCote);
        }
    }
    

    Подключите это к системе AJAX:

    add_action('wp_ajax_my_update_pm', 'my_ajax_cb_wpse_108143');
    add_action('wp_ajax_nopriv_my_update_pm', 'my_ajax_cb_wpse_108143');
    

    Отправьте ваш запрос в http: //site/wp-admin/admin-ajax.php и передайте my_update_pm в качестве аргумента, когда Javascript делает запрос.

    var data = {
        action: 'my_update_pm',
        id: jQuery('section#single article input:last-of-type').attr('value'), 
                cote: 'like'
    };
    jQuery.post(ajax_url, data, function(response) {
        // whatever you need to do; maybe nothing
    });
    

    Вы можете установить ajax_url аналогично этому из Кодекса:

    add_action( 'admin_enqueue_scripts', 'my_enqueue' );
    function my_enqueue($hook) {
        if( 'index.php' != $hook ) return; 
        wp_enqueue_script( 'ajax-script', plugins_url( '/js/my_query.js', __FILE__ ), array('jquery'));
        wp_localize_script( 'ajax-script', 'ajax_object',
                array( 'ajax_url' => admin_url( 'admin-ajax.php' ), 'we_value' => $email_nonce ) );
    }
    

Добавить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: