Zusätzliche Parameter nach dem Permalink hinzufügen?


16

Wie kann ich nach einem Permalink zusätzliche Parameter hinzufügen, insbesondere wenn ich einen benutzerdefinierten Beitragstyp verwende?

http://mysite/album/record-nameNehmen wir zum Beispiel an, es handelt sich um den Permalink. Wie kann ich http://mysite/album/record-name/relatedeinen 404 oder Redirect nicht aufdrehen?

WordPress scheint die Beitragsvorlage nicht aufzurufen, wenn der Beitrag nicht vorhanden ist. Ich bin also ein bisschen ratlos, wie das geht.


1
Ich habe gerade festgestellt, dass ich mysite / album / record-name /? Type = tun kann, aber das löst mein Problem nicht, da ich es in einem schönen URL-Format haben möchte. Ich denke, ich könnte vielleicht ein Neuschreiben auf der Nginx-Seite durchführen, um WordPress zu überschreiben, aber ich würde dies lieber in WordPress tun, wenn es möglich ist.
Relm

Antworten:


17

Sie können Ihren URIs einen Endpunkt hinzufügen, um spezielle Anforderungen zu bearbeiten.

Hier ist ein einfaches Beispiel als Plugin. Um zu verstehen, was los ist, lesen Sie Christopher Davis 'fantastisches Tutorial A (Mostly) Complete Guide to the 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

Sie können dies mit der Rewrite API ‚s add_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;
}

In der Vorlage können Sie erkennen, wann Ihre zugehörige Abfragevariable vorhanden ist:

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

Was bedeutet wpse51444? Ist dies nur eine längere Saite, um sicherzugehen, dass sie nicht mit etwas kollidiert?
Hexodus

@Hexodus yes, wpse = wp stackexchange, 51444 ist die ID dieser Frage. Sie können dies nach Belieben ändern, aber es ist gut, etwas zu verwenden, von dem Sie wissen, dass es einzigartig ist.
Milo

1
Oh danke Milo für die Klärung - das war sehr mysteriös;)
Hexodus

@Hexodus Ich fand es überhaupt nicht mysteriös.
Nabil Kadimi


1

fügen Parameter Post - URL (Permalink), i wie folgt verwenden:

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

Ausgabe:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.