Permalinks para que un tipo de publicación personalizado parezca ser un hijo de otro, no funcione

4

Actualmente tengo dos tipos de mensajes, "productos" y "productos-datos", son tipos de mensajes separados; sin embargo, para todos los efectos, los productos-datos son una publicación secundaria de productos. La relación se establece a través de un elemento meta para productos-datos "padre" que tendrá una ID de publicación de productos.

Las publicaciones de "productos-datos" se crean de una sola manera: un usuario hace clic en un producto en el tipo de publicación de productos e ingresa los datos en una ventana emergente. Esto usa wp_insert_post para crear una publicación de datos de productos y agrega un elemento meta "padre" con el valor del ID de la publicación de "productos". Estos datos se muestran a través de una ventana modal si un usuario hace clic en el tipo de producto.

Estoy tratando de tener sus enlaces permanentes de la siguiente manera:

Esquema de enlace permanente para una publicación de "productos" (para este ejemplo, el ID de esta publicación es 123):

enlace

Esquema de enlace permanente para una publicación de "productos-datos" que tiene una clave / valor meta de padre = > 123

enlace

Aquí está el código que estoy usando para registrar el tipo de publicación y crear reglas de reescritura; sin embargo, después de agregar este código y borrar mis reglas de reescritura (configuración > permalink), funciona bien para un tipo de publicación de "datos de productos" PERO cuando intento acceder a una publicación de "productos", se muestra la página de inicio del sitio de WordPress no es a través de la redirección, la barra de URL muestra la URL de "productos").

Me pregunto si el problema es que los dos permastructs parecen que pueden chocar entre sí, sin embargo, nunca habrá una instancia de esto en la práctica debido al esquema de permastructs.

Cualquier ayuda sería muy apreciada sobre cómo resolver esto.

Código:

add_action ( 'init', 'register_product_post_types' );
add_action ( 'init', 'products_add_rewrite_rules' );
add_filter ( 'post_type_link', 'products_permalinks', 10, 3 );

function register_product_post_types() {    
    register_post_type( 'products',
        array(
                'supports' => array( 'title', 'editor', 'author',"custom-fields", "thumbnail", "excerpt", 'comments' ),
                'labels' => array(
                'name' => __( 'Products' ),
                'singular_name' => __( 'Products' )
            ),
        'public' => true,
        'has_archive' => false,
        'rewrite' => FALSE,
        )
    );

    register_post_type( 'products-data',
        array(
                'supports' => array( 'title', 'editor', 'author',"custom-fields" ),
                'labels' => array(
                'name' => __( 'Products-Data' ),
                'singular_name' => __( 'Products-Data' )
            ),
        'show_in_menu' =>'edit.php?post_type=products',
        'public' => true,
        'has_archive' => false,
        'rewrite' => FALSE,
        )
    );
}


function products_add_rewrite_rules() {
    global $wp_rewrite;
    $wp_rewrite->add_rewrite_tag('%products%', '([^/]+)', 'products=');
    $wp_rewrite->add_rewrite_tag('%products-data%', '([^/]+)', 'products-data=');
    $wp_rewrite->add_rewrite_tag('%parent%', '([^/]+)', 'parent=');
    $wp_rewrite->add_permastruct('products-data', '/products/%parent%/%products-data%', false);

}

function products_permalinks($permalink, $post, $leavename) {
    $no_data = 'no-data';
    $post_id = $post->ID;
    if($post->post_type != 'products-data' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
        return $permalink;
    $data = sanitize_title(get_the_title(get_post_meta($post_id, 'parent', true)));
    if(!$data) $data = $no_data;
    $permalink = str_replace('%parent%', $data, $permalink);
    return $permalink;
}
    
pregunta setterGetter 20.11.2012 - 14:59

1 respuesta

1

Vea mi respuesta aquí: enlace .

El problema al que te enfrentas es que los permastructs están agregando múltiples tipos de publicaciones personalizadas a la URL, lo que está confundiendo a WordPress. Deberá agregar las reglas de reescritura usando add_rewrite_rule() .

    
respondido por el Matthew Boynes 23.05.2013 - 17:47

Lea otras preguntas en las etiquetas