【问题标题】:Wordpress - How to link to a couple of php scripts?Wordpress - 如何链接到几个 php 脚本?
【发布时间】:2016-04-28 17:17:30
【问题描述】:

我的 WordPress 网站中有一个页面,其中包含几个链接。每个链接都应该引用一个 PHP 脚本文件来执行类似下载文件的操作,同时保持在同一页面而不重新加载页面。

我在我的 WordPress 主题中创建了一个名为“scripts”的文件夹,用于将我所有的 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

我能做到吗?

【问题讨论】:

  • 将您创建的脚本文件夹移动到另一个位置怎么样?或者也许使用插件?
  • @bmcculley .. 我检查过的所有 PHP 插件都允许在普通的 WordPress 页面中编写 PHP 代码。如果我单击该链接,它将重定向到那个不是我想要的普通 WordPress 页面。我希望在我仍在链接的同一页面中时执行 PHP 脚本。这就是使用 PHP 文件时会发生的情况。

标签: php wordpress hyperlink


【解决方案1】:

我能够使用page-links-to WordPress plugin 解决此问题。它用普通的 WordPress 链接替换了我原来的 PHP 链接。

【讨论】:

    【解决方案2】:

    如果您希望加载 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;
    });
    

    确保为您的 Ajax 处理程序填写正确的 URL。 action 数据应该是在 PHP 端处理 Ajax 请求的函数的名称。 下一步是将该 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 调用没有指定您的包含文件夹——该文件夹仅在 PHP 文件中指定。在 PHP 方面,我们还会检查是否要求提供有效的 URL,并且它是否在您要包含的有效文件列表中。我鼓励你在你的 ajax 处理程序中添加一个有效的 ajax 函数名数组(这样任何对你没有创建的函数的调用都会被拒绝)。

    最后,您可以像这样添加要包含在 HTML 中的 URL:

    <a href="hello.php" class="doAjax">URL</a>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-13
      • 2011-10-31
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-07-17
      • 2021-05-03
      相关资源
      最近更新 更多