Вставьте строку с $ wpdb при нажатии на ссылку через AJAX - PullRequest
0 голосов
/ 10 октября 2019

Я не могу заставить этот код работать, я пытаюсь вставить строку в базу данных WordPress одним нажатием кнопки.

header.php

if( isset( $_POST['action'], $_POST['user_id'], $_POST['post_id'] ) ) {

global $wpdb;

$datetime = date( "Y-m-d H:i:s" );

wpdb::insert(
    ‘wp_favorites’,
        array(
            ‘user_id’ => $_POST['user_id'],
            ‘post_id’ => $_POST['post_id'],
            ‘datetime’ => $datetime
        )
    );
    die();
}

template.php

<script type="text/javascript">
    $( '.favorite' ).click( function() {
        $.ajax( {
            type: "POST",
            url: "<?php echo "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]" ?>",
            data: { "action": "add", "post_id": "<?php echo get_the_id(); ?>", "user_id": "<?php echo get_current_user_id(); ?>" }
        } ).done( function( msg ) {
            alert( "Data Saved: " + msg );
        } );
    });
</script>


<a class="button favorite"><img src="<?php echo get_template_directory_uri(); ?>/img/icons 3.0/svg/white-heart.svg" width="18" height="18" /></a>

// ОШИБКА

enter image description here

1 Ответ

0 голосов
/ 10 октября 2019

На основе вашего кода (однако это не стандартная практика, но для вас) попробуйте следующий код.

template.php

<script type="text/javascript">
    $('.favorite').click(function() {
        $.ajax({
            type: "POST",
            url: "<?php echo admin_url( 'admin-ajax.php' ); ?>",
            data: { "action": "add_data", "post_id": "<?php echo get_the_id(); ?>", "user_id": "<?php echo get_current_user_id(); ?>" },
            beforeSend: function() {
                // If you want to add loader code
            }
            success: function(response) {
                if( response == 'inserted' ) {
                    alert( "Data Saved: " + msg );
                }
                // If you have loaded remove that here.
            },
            error: function() {}
        });
    });
</script>

Добавить следующий код (скопируйте и вставьте, поскольку в вашем коде есть обратная кавычка, которая не будет принята в массиве) в файл functions.php вашей активной темы

add_action("wp_ajax_add_data", "add_data");
add_action("wp_ajax_nopriv_add_data", "add_data");
function add_data() {

}
if($_POST['user_id'], $_POST['post_id'])) {

    global $wpdb;

    $datetime = date("Y-m-d H:i:s");

    $wpdb->insert(
        'wp_favorites',
        array(
            'user_id => $_POST['user_id'],
            'post_id => $_POST['post_id'],
            'datetime => $datetime
        )
    );

    if( $wpdb->insert_id ) {
        echo 'inserted';
    } 
    die();
}

Удалите весь код, упомянутый в вопросе. Это должно работать для вас!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...