wordpress add_rewrite_rule with custom field

2

How do I create a URL in WordPress, using add_rewrite_rule , equal below but filtering the posts by a custom field?

function custom_rewrite_basic() {
    add_rewrite_rule('^leaf/([0-9]+)/?', 'index.php?page_id=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');
    
asked by anonymous 11.07.2017 / 21:04

1 answer

1

This association does not exist in standard arguments, but you can create it like this:

add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
    // Crie uma rewrite tag junto à rewrite rule:
    add_rewrite_tag( '%campo_personalizado%', '([0-9]+)' );
    // Use essa tag na regra que vai criar:
    add_rewrite_rule('^leaf/([0-9]+)/?', 'index.php?campo_persoanlizado=$matches[1]', 'top');
}

Now you can filter the query by searching:

add_action( 'pre_get_posts', 'filtra_query' );
function filtra_query( $query ) {
    // Agora o campo personalizado está disponível para a query
    $campo = $query->get( 'campo_personalizado' );

    // E se ele existe fazemos uma meta_query para buscar
    // somente os posts com aquele valor:
    if ( ! empty( $campo ) ) {

        $args = array( array(
            'key' => 'campo_personalizado',
            'value' => $campo
            ) );

        $query->set( 'meta_query', $args );
    }
}
    
12.07.2017 / 13:13