используя $ wpdb, чтобы убедиться, что значение cookie уникально. Слишком скоро? - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь добавить пользовательский файл cookie на свой сайт Wordpress, и у меня возникают некоторые проблемы. Я отыскал последнее возможное место для вставки моего куки-файла перед отправкой заголовков, что, по-видимому, находится перед последней строкой в ​​моем wp-config.php

Поэтому я бросил require_once ('path / to / cookie.php') в конец моего wp-config.php и смог установить cookie. Вупи. Но уникальный идентификатор каждого файла cookie должен храниться в моей базе данных. Поэтому я вызвал wp-load.php, чтобы у меня была глобальная переменная $ wpdb, а затем начал пытаться выполнять запросы. 500 ошибок предостаточно. Чего мне не хватает?

Вот конец моего wp-config.php

/* That's all, stop editing! Happy blogging. */
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . '/wp-content/plugins/myPlugin/cookie.php');
require_once(ABSPATH . 'wp-settings.php');

А вот cookie.php

$path = $_SERVER['DOCUMENT_ROOT']; 
require_once $path . '/wp-load.php';

function rand_string( $length ) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  

    $size = strlen( $chars );
    for( $i = 0; $i < $length; $i++ ) {
        $str .= $chars[ rand( 0, $size - 1 ) ];
    }

    return $str;
}

function check_id($id){
    global $wpdb;
    $results = $wpdb->get_results("SELECT id FROM visitors WHERE userid = '$id'");
    if(mysqli_num_rows($results) > 0){
        return false;
    } else {
        return true;
    }
}

if(!isset($_COOKIE['visitor'])){
    $key = false;
    while($key == false){
        if(check_id($userid = rand_string(32))){
            $key = true;        
        }
    }
    setcookie("visitor", $userid, time() + ((86400 * 30)*12), "/", "site.com");
}

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете загрузить WP файлы в cookie.php:

define( 'BLOCK_LOAD', true );
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-config.php' );
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-includes/wp-db.php' );
$wpdb = new wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);

Надеюсь, что это работает для вас.

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