繁体   English   中英

在 wordpress 中包含模板时,如何将 get_query_var 用于多个 url

[英]How do I use get_query_var for multiple urls when including template in wordpress

我在下面使用 function 将特定的 url 重定向到特定的 php 脚本文件:

add_action('wp', function() {
if ( trim(parse_url(add_query_arg(array()), PHP_URL_PATH), '/') === 'pagename' ) {
include(locate_template('give_some.php'));
exit();
}});

它仅适用于指定的 url,我想让它适用于多个网址。 假设一个文件 urls.txt 包含数字 url 并且必须触发上面的代码。 知道怎么做吗?

我是 WordPress 的长期开发人员,对 WordPress 问题的最佳回应之一是“这不是 WordPress 问题,只是简单的 PHP(或 JavaScript)”。 这是一件非常好的事情,因为它让谈论变得非常容易。

据我了解,您的问题是您想将当前 URL 与可能路径的“文件”进行比较。 你有 WordPress 相当于“当前 URL”,所以我认为这是理所当然的,我还假设你可以获取一个文件并将其转换为一个数组。 但是一旦你这样做了,你就在解析一个 URL(你已经做了)并查看它是否在数组中:

$url = 'https://www.example.com/pagename?a=b&c=d';

$paths = [
    'gerp',
    'pagename',
    'cheese',
];


$path = trim(parse_url($url, PHP_URL_PATH), '/');
if ( in_array($path, $paths )) {
    echo 'yes';
} else {
    echo 'no';
}

演示: https://3v4l.org/NOmpk

您可以使用不同的挂钩request 这允许你操纵请求。

add_filter( 'request', function( $request ){});

我的简单示例(未测试)。

add_filter( 'request', function( $request ){
        $data = file_get_contents("database.txt"); //read the file
        $rows = explode("\n", $data); //create array separate by new line
        $rows = array_map("trim", $rows); // for removing any unwanted space
        $rowCount = count($rows); // Count your database rows

        for ($i=0; $i < $rows ; $i++) {
            if( isset( $request['pagename'] ) && $rows[$i] == $request['pagename'] ){
              include(locate_template('give_some.php'));
            }
        }

    return $request;
});

我的建议是,不要使用.txt 文件,将数据保存到数据库中,然后使用它,或者创建wp_option字段,并从设置页面进行管理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM