2016-04-28 4 views
0

У меня есть страница на моем веб-сайте WordPress, на которой есть несколько ссылок. Каждая ссылка должна ссылаться на файл скрипта PHP для выполнения действия, например, при загрузке файла, оставаясь на одной странице без перезагрузки страницы.Wordpress - Как связать несколько паролей PHP-скриптов?

Я создал папку под названием «сценарии» в моей теме WordPress, чтобы поместить все мои PHP файлы внутри него, и я испытал, используя прямые ссылки на эти PHP скрипты, чтобы убедиться, что они работают хорошо, как:

http://my_wordpress_website.com/test_wordpress_project/wp-content/themes/theme-child/scripts/php_script1.php

http://my_wordpress_website.com/test_wordpress_project/wp-content/themes/theme-child/scripts/php_script2.php

Звенья работал нормально, когда щелкая их и страница не перезагружается, конечно. Но так как эти ссылки являются недопустимыми для WordPress и они выставляют мой сайт, я ищу способ сделать то же самое поведение, но с действительными ссылками WordPress, как:

http://my_wordpress_website.com/php_script1

http://my_wordpress_website.com/php_script2

В любом случае я могу это сделать?

+1

Что о перемещении сценарии в созданную папку в другое место? или, возможно, с помощью плагина? – bmcculley

+0

@bmcculley. Все плагины PHP, которые я проверил, позволяют писать PHP-код на обычных страницах WordPress. Если я нажму ссылку, он перенаправится на эту обычную страницу WordPress, чего я не хочу. Я хочу, чтобы скрипт PHP выполнялся, пока я все еще на одной странице ссылки. Это происходит с использованием файлов PHP. – Brad

ответ

0

Если вы хотите загрузить файлы PHP без перенаправления на них (и без использования плагина), я предлагаю вам использовать вызов Ajax. Добавить это в JavaScript, который загружает на странице:

$('.doAjax').click(function(){ 
    $.ajax({ 
    url: 'http://my_wordpress_website.com/my_ajax_handler.php' 
    type: "POST", 
    data: { action:'include_files_from_url', url:$(this).attr('href') }, 
    success : function (data) { 
     //Actions upon success if needed. 
    } 
    }); 
    return false; 
}); 

Убедитесь, чтобы заполнить правильный URL для обработчика Ajax. Данные action должны быть именем функции, которая обрабатывает ваш запрос Ajax на стороне PHP. Следующим шагом будет добавление этой функции PHP для functions.php:

function include_files_from_url() 
{ 
    //Optional data validation to prevent abuse. 
    if (!isset($_POST['url'])) 
    { 
     echo 'invalid file name.'; 
     die; 
    } 

    $allowedFiles = array(''); //Fill this with the file names you allow to be accessed. 
    if (!in_array($_POST['url'], $allowedFiles)) return FALSE; 
    //End of Optional data validation to prevent abuse. 

    $result = @include_once('includes/' . $_POST['url']); //This function assumes your files are in an includes folder. Change as needed. 
    if ($result) echo 'Successfully included ' . $_POST['url']; 
    else echo 'Failed to include ' . $_POST['url'] . '. File was not found.';  
} 
add_action('wp_ajax_nopriv_include_files_from_url', 'include_files_from_url'); //To allow non-logged in user to use this call 
add_action('wp_ajax_include_files_from_url', 'include_files_from_url'); //To allow logged in user to use this call 

Обратите внимание, как этот метод дает гораздо больше возможностей безопасности. Во-первых, вызов Javascript Ajax не указывает вашу папку include - эта папка указана только в файле PHP. На стороне PHP мы также проверяем, что запрашивается действительный URL-адрес, и что он включен в список допустимых файлов. Я также рекомендую вам добавить массив допустимых имен функций ajax внутри вашего обработчика ajax (так что любой вызов функции, которую вы не создали, будет отклонен).

Наконец, вы можете добавить URL-адресов, которые будут включены в ваш HTML, как, например:

<a href="hello.php" class="doAjax">URL</a> 
Смежные вопросы