从我的Wordpress插件中更改wp_title

时间:2011-10-24 15:39:28

标签: php wordpress plugins

几乎完成了我的一个房地产经纪人的wp插件, 我抓住了404的网站等,我注意到我的属性详细信息页面都是蜘蛛网,所有45个页面标题都是:(详情|网站名称)(页面标题是通过查询字符串传递的ID动态显示的)

现在我已经修好了网址,网址看起来像这样......

wpsite.com/details/20043/property+for+sale+in+this+area

其中......

  • propid = 20043
  • propname = property + for + sale + in + this + area

这两个都是查询字符串值,用于重写URL。

'query_vars' => array('propid', 'propname'),
'rules' => 
array( '(.+?)/([^/]+)/([^/]+)/?$' => 'index.php?pagename=$matches[1]&propid=$matches[2]&propname=$matches[3]' )
);

现在当加载属性详细信息页面时,我试图挂钩到wordpress过滤器 wp_title但这并不像我预期的那样工作..

这是用于生成标题的代码

function wp_myplugin_property_title()
{
    $wp_acquaint_id = get_option("wp_system_id");
    $propid = get_query_var('propid');
    if(isset($propid)){
        $seotitle = wp_myplugin_seo_title($propid);
    }else{
        $seotitle = "TEST Title";   
    }
    return $seotitle;   
}

if( is_page('details') ){
    add_filter('wp_title', wp_myplugin_property_title, 100);
}

该函数中使用的函数:wp_myplugin_seo_title($ propid)生成我想要使用的实际标题...

function wp_myplugin_seo_title($propid)
{
    $wp_acquaint_id = get_option("wp_acquaint_id");
    $xml = wp_myplugin_get_property($propid);
    foreach($xml->PropertiesDataSet->Properties as $node) {
        include('xml_loop.php');

        if($bedrooms==0){ }else{ $seo_title.= $bedrooms." bedroom "; }

        $seo_title.= wp_myplugin_get_property_type($type_id)." "; //ie:flat
        $seo_title.= str_replace("(","",$street);
        $seo_title.= " ".$town." | ".get_bloginfo('name');
    }
    return $seo_title;
}

我发现使用if(is_page())在过滤器周围的页面标题dosnt更改,如果我删除is_page,道具详细信息页面标题工作正常但是!!!

在属性列表页面上,页面标题循环遍历该页面上的所有属性,并生成大约1000个字符长的页面标题..!

我一直在寻找更好的方法来解决这个问题,但任何帮助都会很棒......

干杯

玛蒂

ps:目前由Yoast运行wordpress seo! 这就是为什么我在add_filter中将优先级设置为100只是为了看它是否会覆盖标题..

1 个答案:

答案 0 :(得分:2)

在functions.php中使用is_page不起作用,因为它在wp知道要呈现的页面之前运行,或者即使它是一个开头的页面。将is_page()粘贴在函数内部,它应该可以工作。像:

function wp_myplugin_property_title()
{ 
  if( is_page('details') ){
    $wp_acquaint_id = get_option("wp_system_id");
    $propid = get_query_var('propid');
    if(isset($propid)){
        $seotitle = wp_myplugin_seo_title($propid);
    }else{
        $seotitle = "TEST Title";   
    }
    return $seotitle;   
  }
}


add_filter('wp_title', wp_myplugin_property_title, 100);