在永久链接后添加其他参数?


17

如何在固定链接后添加额外的参数,特别是在使用自定义帖子类型的情况下?

例如,假设http://mysite/album/record-name是永久链接。如何http://mysite/album/record-name/related不打开404或重定向?

如果该帖子不存在,WordPress似乎不会调用该帖子模板。


1
我只是意识到我可以做mysite / album / record-name /?type = related,但这并不能解决我的问题,因为我希望它以一种不错的URL格式显示。我想我可能可以在nginx方面重写以覆盖WordPress,但如果可能的话,我宁愿在WordPress中进行处理。
relm 2012年

Answers:


18

您可以将端点添加到URI中以处理特殊请求。

这是一个作为插件的基本示例。要了解正在发生的事情,请阅读Christopher Davis精彩的教程A(大多数)WordPress Rewrite API完整指南

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 Endpoint Example
 * Description: Adds a permalink endpoint to posts named <code>epex</code>
 */

add_action( 'init', 't5_add_epex' );

function t5_add_epex()
{
    add_rewrite_endpoint( 'epex', EP_PERMALINK );
}

add_action( 'template_redirect', 't5_render_epex' );

/**
 * Handle calls to the endpoint.
 */
function t5_render_epex()
{
    if ( ! is_singular() or ! get_query_var( 'epex' ) )
    {
        return;
    }

    // You will probably do something more productive.
    $post = get_queried_object();
    print '<pre>' . htmlspecialchars( print_r( $post, TRUE ) ) . '</pre>';
    exit;
}


add_filter( 'request', 't5_set_epex_var' );

/**
 * Make sure that 'get_query_var( 'epex' )' will not return just an empty string if it is set.
 *
 * @param  array $vars
 * @return array
 */
function t5_set_epex_var( $vars )
{
    isset( $vars['epex'] ) and $vars['epex'] = true;
    return $vars;
}

12

您可以使用Rewrite APIadd_rewrite_endpoint进行此操作

add_action( 'init', 'wpse51444_endpoint' );
function wpse51444_endpoint(){
    add_rewrite_endpoint( 'related', EP_ALL );
}

add_filter( 'query_vars', 'wpse51444_query_vars' );
function wpse51444_query_vars( $query_vars ){
    // add related to the array of recognized query vars
    $query_vars[] = 'related';
    return $query_vars;
}

在模板中,您可以检测到何时存在相关查询var:

if( array_key_exists( 'related' , $wp_query->query_vars ) ):
    // current request ends in related
endif;

wpse51444是什么意思?这只是一个冗长的字符串,以确保不会与某些东西发生碰撞吗?
Hexodus

@Hexodus是的,wpse = wp stackexchange,51444是此问题的ID。您可以将其更改为所需的任何内容,但是最好使用您知道独特的东西。
米洛(Milo)2013年

1
噢,谢谢Milo的澄清-这是非常神秘的;)
Hexodus

@Hexodus我一点都不觉得神秘。
Nabil Kadimi 2014年


2

参数添加到URL后(永久),我用的是这样的:

add_filter( 'post_type_link', 'append_query_string', 10, 2 );
function append_query_string( $url, $post ) 
{
    return $url.'?my_pid='.$post->ID;
}

输出:

http://yoursite.com/pagename?my_pid=12345678

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.