2015-08-12 3 views
-2

Я иду из мира MVC, и это довольно сложно для меня еще схватить. Я пытаюсь выяснить, что является Wordpress способ обработки сообщений. Я просмотрел его в Интернете, и я обнаружил, что должен использовать add_action с функцией, определенной в моей теме functions.php, но я не могу понять, как указать, на какой ури эта функция должна выполняться.Как обращаться с запросами POST

Например, у меня есть функции а и Ь, что я хочу, чтобы выполнить на соответствующих URL-адресов blog.com/handle_post?function=a и blog.com/handle_post?function=b - как я вижу его, мне нужно, чтобы проверить внутри функций, если $_GET['function'] равно функции, что я в настоящее время но это не имеет никакого смысла - сначала начните выполнение функции, а затем выйдите, если она не является правильной - что не может быть прав?

Также о части URL-адреса handle_post, где я должен это определить?

В приложении MVC обычно URL-адрес выглядит как site.com/controller/method/data, где он будет вызывать метод на контроллере, указанном в URL-адресе. Это не относится к wordpress, я пытаюсь выяснить, как создать ресурс в blog.com/handle_post для почтовых запросов, поэтому я бы не получил 404 не найден. Конечно, я могу создать файл в корневом каталоге блога и указать на это, но тогда у меня не было бы среды wordpress в моих сценариях, константах, функциях и т. Д.

+0

Что с авансовым голосованием ? –

+1

umm, недостаток исследовательских усилий –

+0

@RahilWazir, вы, должно быть, шутите, я потратил больше 2 часов на это уже ........ –

ответ

1

Вы можете использовать крюк общего назначения init, чтобы поймать ваш запрос и обработать его. Допустим, вы отправить форму на страницу, где он стоит, с скрытая вход помогает идентифицировать функцию, которая будет называться:

<form method="post" action=""> 
    <input type="hidden" name="action" value="process_my_form" /> 
    <!-- your form inputs here... --> 
</form> 

, а затем в functions.php:

function process_my_form() { 
    // Check if there is any post data and if it comes from our form 
    if(empty($_POST) || !isset($_POST['action']) || $_POST['action'] != 'process_my_form') { 
     return; 
    } 

    // Check if inputs submitted are valid 
    if(!isset($_POST['my_field']) || empty($_POST['my_field'])) { 
     $_SESSION['my_form_error'] = __('Invalid input'); 
     return; 
    } 

    // If all data are valid, process your form, then redirect to whatever with : 
    wp_redirect(home_url() . '/my-page-to-redirect/'); 
} 
add_action('init', 'process_my_form'); 

Тогда в ваш шаблон вы можете проверить на $_SESSION['my_form_error'], чтобы отобразить сообщение об ошибке, если ввод недействителен.

Пожалуйста, не то, что если вам необходимо включить WordPress функциональности в автономном сценарии один день, вы можете включить ядро ​​WP с WP-config.php:

require_once(getcwd() . '/wp-config.php'); 
+0

Вау, это только я или это ужасный дизайн кода? Спасибо за ваш ответ, особенно за последнюю часть, я думаю, что это будет очень полезно для меня! –

Смежные вопросы