Adăugare parametri suplimentari după permalink

8 mai 2012, 02:44:24
Vizualizări: 28.9K
Voturi: 18

Cum pot adăuga parametri suplimentari după un permalink, în special dacă folosesc un tip de postare personalizat?

De exemplu, să zicem că http://mysite/album/record-name este permalink-ul. Cum pot face ca http://mysite/album/record-name/related să nu genereze o eroare 404 sau o redirecționare?

WordPress nu pare să apeleze șablonul postării dacă postarea nu există... așa că nu știu exact cum să fac acest lucru.

1
Comentarii

Tocmai am realizat că pot face http://mysite/album/record-name/?type=related dar asta nu rezolvă problema mea, deoarece vreau să fie într-un format URL frumos. Mă gândesc că aș putea face o rescriere pe partea de nginx pentru a suprascrie WordPress, dar aș prefera să gestionez acest lucru în WordPress dacă este posibil.

relm relm
8 mai 2012 02:50:27
Toate răspunsurile la întrebare 3
0
19

Puteți adăuga un endpoint la URL-urile dvs. pentru a gestiona cereri speciale.

Iată un exemplu de bază ca plugin. Pentru a înțelege ce se întâmplă, citiți tutorialul fantastic al lui Christopher Davis Ghidul (aproape) complet al API-ului de rescriere WordPress.

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: Exemplu T5 Endpoint
 * Description: Adaugă un endpoint de permalink la articole numit <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' );

/**
 * Gestionează apelurile către endpoint.
 */
function t5_render_epex()
{
    if ( ! is_singular() or ! get_query_var( 'epex' ) )
    {
        return;
    }

    // Probabil veți face ceva mai productiv aici.
    $post = get_queried_object();
    print '<pre>' . htmlspecialchars( print_r( $post, TRUE ) ) . '</pre>';
    exit;
}


add_filter( 'request', 't5_set_epex_var' );

/**
 * Asigură-te că 'get_query_var( 'epex' )' nu va returna doar un șir gol dacă este setat.
 *
 * @param  array $vars
 * @return array
 */
function t5_set_epex_var( $vars )
{
    isset( $vars['epex'] ) and $vars['epex'] = true;
    return $vars;
}
8 mai 2012 03:24:23
5
12

Puteți face acest lucru cu Rewrite API folosind 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 ){
    // adaugă 'related' în array-ul de variabile de interogare recunoscute
    $query_vars[] = 'related';
    return $query_vars;
}

În șablon puteți detecta când variabila de interogare 'related' este prezentă:

if( array_key_exists( 'related' , $wp_query->query_vars ) ):
    // cererea curentă se termină cu 'related'
endif;
8 mai 2012 03:23:25
Comentarii

Ce înseamnă wpse51444? Este doar un șir lung pentru a evita coliziunile cu altceva?

Hexodus Hexodus
15 nov. 2013 16:14:57

@Hexodus da, wpse = wp stackexchange, 51444 este ID-ul acestei întrebări. Poți schimba asta cu orice dorești, dar e bine să folosești ceva ce știi că va fi unic.

Milo Milo
15 nov. 2013 16:39:11

Oh, mulțumesc Milo pentru lămurire - era foarte misterios ;)

Hexodus Hexodus
15 nov. 2013 17:05:04

@Hexodus Nu mi s-a părut deloc misterios.

Nabil Kadimi Nabil Kadimi
22 nov. 2014 01:57:37

Nu uita să reîncarci legăturile permanente.

Charlie Vieillard Charlie Vieillard
26 oct. 2016 11:54:32
0

pentru a adăuga un parametru la URL-ul articolului (legătură permanentă), folosesc astfel:

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

rezultat:

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

1 apr. 2014 16:59:49