Passing variables to new page

时间:2011-08-17 作者:Jeremy Love

我试图将变量传递到新页面,我在主题中创建了一个函数来获得结果。现在当我使用yelplist(); 在我的主题首页上,它会得到结果,当我点击链接时,它会按要求将图像和城市返回给我。

Questions:

<然而,我想知道我能做些什么让变量传递到自己的页面。例如:如果我单击该名称,一个新页面将显示该链接的图像和城市结果

Update 1

*我在使用$\\u会话方面取得了一些进展,现在我可以将变量传递到单个会话中。然而,当我点击这个链接时,它并没有更新单个链接中的变量。php文件,它只获取最后解析的链接信息,而不是我单击的链接信息。

还有,当我点击底部的链接,让它尝试转到单曲。php文件我找不到对象<a href=\'single.php?p=$pizza_url\'><img border=0 src=\'".$business->photo_url."\'></a> 我该怎么做才能让它转到单个页面并更新变量?

这是我在函数文件中的内容。

function yelplist(){

require_once (\'/lib/OAuth.php\'); 
require_once (\'yelp.php\'); 
require_once(ABSPATH.\'/wp-admin/includes/taxonomy.php\');

$yelpstring = file_get_contents(\'http://api.yelp.com/business_review_search?term=pizza&location=Los%20Angeles&ywsid=xxxxxxxxxxxxxxxxxxx\');
$obj = json_decode($yelpstring);

        foreach($obj->businesses as $business):
            $business->photo_url;
            $pizza_name = $business->url;
            $business->name;
            $business->phone;
            $city = $business->city;

            $url = \'\'.$business->url.\'\';
            $pizza = parse_url($url, PHP_URL_PATH);
            $pizza_url = trim(\'\'.$pizza.\'\',\'/biz\');
            $lower_case_city_url = $city;
            $lower_case_city_url = strtolower($lower_case_city_url);
            $city_url = str_replace(\' \',\'-\',$lower_case_city_url);

            if(isset($_SESSION[\'p\']) && $_SESSION[\'p\']==\'\'.$pizza_url.\'\') {

            $_SESSION[\'pizza_name\']= $business->name; 
            $_SESSION[\'pizza_city\']= $city = $business->city; 
            $_SESSION[\'pizza_phone\']= $business->phone;
            $_SESSION[\'pizza_photo\'] = $business->photo_url;

        }else{

        echo "<div><a href=\'?p=$pizza_url\'>$business->name</a></div>";
            }
        endforeach;
        }
这就是我在单曲中使用的内容。php文件来获取结果。

<?php session_start(); ?>
<?php echo $_SESSION[\'pizza_name\']; ?> </br>
<?php echo $_SESSION[\'pizza_phone\']; ?></br>
<?php echo $_SESSION[\'pizza_city\']; ?></br>
<?php echo "<img border=0 src=".$_SESSION[\'pizzaphoto\'].">"; ?>
谢谢

2 个回复
最合适的回答,由SO网友:goldenapples 整理而成

Edit: 好吧,我明白你想做得更好一点。这应该有助于你达到目标。

缓存您想要的数据。如果你在每次页面加载时都查询Yelp,你会很快超过API限制,更不用说让你的网站速度大大降低了。

function yelplist() {

    $pizza_joints = wp_cache_get( \'pizza-joints\' );

    if ( !$pizza_joints ) {

        require_once (\'/lib/OAuth.php\'); 
        require_once (\'yelp.php\'); 
        require_once(ABSPATH.\'/wp-admin/includes/taxonomy.php\');

        $yelpstring = file_get_contents(\'http://api.yelp.com/business_review_search?term=pizza&location=Los%20Angeles&ywsid=xxxxxxxxxxxxxxxxxxx\');

        $obj = json_decode($yelpstring);

        $pizza_joints = array();

        foreach( $obj->businesses as $business ) {

            $path = trim( \'\' . parse_url($business->url, PHP_URL_PATH) . \'\', \'/biz\' );
            $pizza_joints[ $path ] = $business;

        }

        wp_cache_set( \'pizza-joints\', $pizza_joints );

    }

    return $pizza_joints;

}
创建一个单独的比萨饼联合评论页面,并为其设置自定义页面模板。跟踪该页面的页面ID。在我剩下的示例中,我会说这个页面的ID为50 其使用的页面模板是single-pizza.php.

在首页上:当您想链接到各个比萨饼店页面时,请链接到该页面,并传递一个额外的变量来反映您想显示的各个比萨饼店。使用该功能add_query_arg 要生成传递该变量的url,请执行以下操作:

$pizza_joints = yelplist();

foreach ( $pizza_joints as $path => $pizza_joint ) {

    echo \'<p><a href="\' 
        . add_query_arg( \'pizza\', $path, get_permalink( 50 ) )
        . \'">\' . $pizza_joint->name . \'</a></p>\';

}
现在单击该链接时,查看器将转到模板定义的页面single-pizza.php. 在该模板中,您可以通过检查$\\u GET[\'pizza]的内容来访问传递的变量。

/*

Template Name: Single Pizza Joint Data

*/

$pizza_joints = yelplist();

if ( isset( $_GET[\'pizza\'] ) &&  array_key_exists( $_GET[\'pizza\'], $pizza_joints ) ) {

    $this_business = $pizza_joints[ $_GET[\'pizza\'] ];

    echo \'<img src="\' . $this_business->photo_url .\'">\';
    echo \'<h2>\' . $this_business->name .\'</h2>\';
    echo \'<h4>\' . $this_business->phone .\'</h2>\';

} else { 

    // either no variable was passed, or it doesn\'t match a business in the list

    wp_redirect( home_url() );

        }

SO网友:Drew Gourley

这是否可以像使用查询字符串点击页面后重置变量一样简单?

在单曲的顶部说这样的话。php将在点击页面时重置比萨饼url:

<?php $_SESSION[\'pizza_url\'] = $_GET[\'p\']; ?>
如果启用了相当多的永久链接,但无法使用$\\u GET字符串,则可以获取如下查询变量:

<?php $_SESSION[\'pizza_url\'] = get_query_var(\'p\'); ?>
这并不能让你一直做到这一点,但我想我才刚刚开始理解你的问题,但我希望我们能得出一个对你有用的结论。随时通知我。

结束