WordPress使用代理重写URL

时间:2013-03-21 作者:B L Praveen

我没有从谷歌搜索中找到任何有用的提示,我在wordpress论坛上写了同样的问题,但没有得到回复

我在这里写完整的步骤

第一步我将页面重定向到自定义后期归档页面

添加\\u操作(“template\\u redirect”、“plu\\u redirects”)//我正在会话中保存post\\u id,它是事件$\\u会话[\'event\\u page\']=$\\u GET[\'event\'];

wp\\u safe\\u重定向(get\\u post\\u type\\u archive\\u link(\'plug\');

在存档页面中,我试图通过id获取帖子,如果会话不存在,则获取最新帖子。

    if ( !isset($_SESSION[\'event_page\'])) :
        $args = array(
            \'post_type\'=> \'plug\',
            \'posts_per_page\' => 1,
            \'order\'    => \'ASC\',
            \'tax_query\' => array(
                array(
                    \'taxonomy\' => \'event_type\',
                    \'field\' => \'slug\',
                    \'terms\' => \'schedule\'
                )
            )
        );
        query_posts($args);
    else :
        $args = array(
            \'post_type\'=> \'plug\',
            \'posts_per_page\' => 1,
                                \'p\' => $_SESSION[\'event_page\'],
            \'order\'    => \'ASC\',
            \'tax_query\' => array(
                array(
                    \'taxonomy\' => \'event_type\',
                    \'field\' => \'slug\',
                    \'terms\' => \'schedule\'
                )
            )
        );
        query_posts($args);         endif;
但这总是在会话设置时获取最后一条记录。。。为什么?我需要有更好的方法来编写it代码,而不是使用会话,而且我不需要循环,因为我只得到一条记录。我在存档页面中遇到问题,我添加的代码正在工作。但不专业。。

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

我们将注册一个查询变量,而不是使用$\\u会话变量。

function wpa_91718_query_var( $vars ) {
    $vars[] = \'event_page\';
    return $vars;
}
add_filter( \'query_vars\', \'wpa_91718_query_var\' );
然后,我们可以在运行查询之前使用pre_get_posts.

如果我正确理解了您和您的代码,那么如果URL中存在查询变量,那么您需要搜索具有该ID的帖子。否则,您只需要在“event\\u type”分类中显示带有“schedule”术语的最新CPT。

我认为这可以通过以下方式实现:

function wpa_91718_pre_get_posts( $query ) {
    // only modify the main query and only on the front-end
    if ( !is_admin() && $query->is_main_query() ) {

    if ( is_post_type_archive( \'plug\' ) ) {
      // Display only 1 post for the cpt archive
      set_query_var( \'posts_per_page\', 1 );

      // if query var exists search for that particular post ID number
      if ( $event_page = get_query_var( \'event_page\' ) ){
        set_query_var( \'p\', (int) $event_page );
      // otherwise get the most recent post of event_type taxonomy
      } else {
        set_query_var( \'event_type\', \'schedule\' );
      }
    }
  }
}
add_action( \'pre_get_posts\',\'wpa_91718_pre_get_posts\' );
完全没有经过测试,但我认为这应该让你走上正确的道路。

结束

相关推荐

WordPress使用代理重写URL - 小码农CODE - 行之有效找到问题解决它

WordPress使用代理重写URL

时间:2013-03-21 作者:B L Praveen

我没有从谷歌搜索中找到任何有用的提示,我在wordpress论坛上写了同样的问题,但没有得到回复

我在这里写完整的步骤

第一步我将页面重定向到自定义后期归档页面

添加\\u操作(“template\\u redirect”、“plu\\u redirects”)//我正在会话中保存post\\u id,它是事件$\\u会话[\'event\\u page\']=$\\u GET[\'event\'];

wp\\u safe\\u重定向(get\\u post\\u type\\u archive\\u link(\'plug\');

在存档页面中,我试图通过id获取帖子,如果会话不存在,则获取最新帖子。

    if ( !isset($_SESSION[\'event_page\'])) :
        $args = array(
            \'post_type\'=> \'plug\',
            \'posts_per_page\' => 1,
            \'order\'    => \'ASC\',
            \'tax_query\' => array(
                array(
                    \'taxonomy\' => \'event_type\',
                    \'field\' => \'slug\',
                    \'terms\' => \'schedule\'
                )
            )
        );
        query_posts($args);
    else :
        $args = array(
            \'post_type\'=> \'plug\',
            \'posts_per_page\' => 1,
                                \'p\' => $_SESSION[\'event_page\'],
            \'order\'    => \'ASC\',
            \'tax_query\' => array(
                array(
                    \'taxonomy\' => \'event_type\',
                    \'field\' => \'slug\',
                    \'terms\' => \'schedule\'
                )
            )
        );
        query_posts($args);         endif;
但这总是在会话设置时获取最后一条记录。。。为什么?我需要有更好的方法来编写it代码,而不是使用会话,而且我不需要循环,因为我只得到一条记录。我在存档页面中遇到问题,我添加的代码正在工作。但不专业。。

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

我们将注册一个查询变量,而不是使用$\\u会话变量。

function wpa_91718_query_var( $vars ) {
    $vars[] = \'event_page\';
    return $vars;
}
add_filter( \'query_vars\', \'wpa_91718_query_var\' );
然后,我们可以在运行查询之前使用pre_get_posts.

如果我正确理解了您和您的代码,那么如果URL中存在查询变量,那么您需要搜索具有该ID的帖子。否则,您只需要在“event\\u type”分类中显示带有“schedule”术语的最新CPT。

我认为这可以通过以下方式实现:

function wpa_91718_pre_get_posts( $query ) {
    // only modify the main query and only on the front-end
    if ( !is_admin() && $query->is_main_query() ) {

    if ( is_post_type_archive( \'plug\' ) ) {
      // Display only 1 post for the cpt archive
      set_query_var( \'posts_per_page\', 1 );

      // if query var exists search for that particular post ID number
      if ( $event_page = get_query_var( \'event_page\' ) ){
        set_query_var( \'p\', (int) $event_page );
      // otherwise get the most recent post of event_type taxonomy
      } else {
        set_query_var( \'event_type\', \'schedule\' );
      }
    }
  }
}
add_action( \'pre_get_posts\',\'wpa_91718_pre_get_posts\' );
完全没有经过测试,但我认为这应该让你走上正确的道路。

相关推荐