我在一个客户的特殊情况下,我们想要一个位置短代码,该短代码根据URL中提供的位置显示动态内容。
例如:www.sitename.com/US
这不是实际页面,而是www.sitename.com的版本,其中包含与美国相关的信息
在这种情况下,存在两种具有挑战性的方案。
1-我们需要它们成为永久链接,因为我们想在Google中列出它们。因此?location = US无法正常工作。
2-短代码可以在具有选定模板的任何页面上,因此无法实际分配静态重写规则。
我实施了一个解决方案,其中将为每个具有所选模板的页面自动添加一个重写规则。
这很好用。我只是想寻求帮助,以查看是否可以采用更好的方法来完成此操作,或者该方法是否存在任何缺点。
<?php
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
class RegisterLocationRewriteRule
{
/**
* Start up
*/
function __construct()
{
/* Rewrite Rules for the location shortcode */
add_action('init', array( $this, 'register_location_rewrite_tag' ), 10, 0);
/* Rewrite rule tag */
add_action('init', array( $this, 'register_location_rewrite_rule' ), 10, 0);
}
/**
* Register the location tag in urls
*
* @return none
* @author Fahad Sheikh
**/
public function register_location_rewrite_tag() {
// Added a rewrite tag for the location attribute
add_rewrite_tag('%location%', '([^&]+)');
}
/**
* Register the location rewrite rule
*
* @return none
* @author Fahad Sheikh
**/
public function register_location_rewrite_rule() {
// args to get all pages with the selected template
$args = array(
'post_type' => 'page',
'posts_per_page' => -1,
'meta_query' => array(
array(
'key' => '_wp_page_template',
'value' => 'template-path/template-name.php'
)
)
);
// get all pages with the selected template
$the_pages = new WP_Query( $args );
// for each page with the selected template add the rewrite rule
// that accepts the location attribute
if( $the_pages->have_posts() ){
while( $the_pages->have_posts() ){
$the_pages->the_post();
add_rewrite_rule('^'.$the_pages->post-
>post_name.'/([^/]*)?','index.php?
page_id='.get_the_ID().'&location=$matches[1]','top');
}
}
wp_reset_postdata();
}
}
new RegisterLocationRewriteRule();