wordpress add_rewrite_rule with custom field

Asked

Viewed 118 times

2

How do I create a URL in Wordpress, using the add_rewrite_rule, same below but filtering 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');

1 answer

1


This association does not exist in the standard arguments, but you can create so:

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 );
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.