Escritura de reescritura 'reescritura' para el tipo de publicación personalizada utilizada por el complemento

2

pregunta rápida: estoy usando un complemento que crea un tipo de mensaje personalizado con la barra / proyectos / reescribir /

Entonces myurl.com/projects/single-project

Quiero reescribir 'proyectos / con

'rewrite' => array('slug'=>''),

¿Hay un gancho o algo para poder conectarme a la función register_post_type() del complemento externo?

Quiero que esta reescritura ocurra en mi functions.php y solo si este complemento está activado. Sé el nombre del tipo de artículo de encendido "post-ignición"

Saludos cordiales, Matt

Actualizar

function modify_ign_projects() {
    if ( post_type_exists( 'ignition_product' ) ) {

        global $wp_post_types, $wp_rewrite;
        $wp_post_types['ignition_product']->hierarchical = true;
        $args = $wp_post_types['ignition_product'];
        //print_r( $args ); // [rewrite] => Array ( [slug] => projects
        $wp_rewrite->add_rewrite_tag("%spendenprojekte%", '(.+?)', "projects");
        add_post_type_support('ignition_product','page-attributes');
    }
}
add_action( 'init', 'modify_ign_projects', 100 );
    
pregunta mathiregister 15.05.2015 - 10:58

2 respuestas

2

Busqué en todas partes en el flujo de registro de tipo de publicación, pero no encontré la forma correcta (con filtro o acción) para hacerlo.

Todo lo que puede hacer es volver a registrar el tipo de publicación con un slug diferente (yo prefiero) o simplemente ejecutar esas líneas de código que WordPress ejecuta para crear las reglas de reescritura en register_post_type.

Registré este tipo de publicación con el slug book y lo cambié usando este truco. No estoy seguro de que sea correcto al 100% (ya que estoy reescribiendo las reglas para el mismo tipo de publicación) pero funciona.

add_action('registered_post_type', 'testbook', 10, 2);
function testbook($post_type, $args) {
    global $wp_rewrite;
    if ($post_type == 'book') {

        $args->rewrite['slug'] = 'changed_slug_book'; //write your new slug here

        if ( $args->has_archive ) {
                $archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive;
                if ( $args->rewrite['with_front'] )
                        $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
                else
                        $archive_slug = $wp_rewrite->root . $archive_slug;

                add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' );
                if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) {
                        $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
                        add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
                        add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
                }
                if ( $args->rewrite['pages'] )
                        add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' );
        }

        $permastruct_args = $args->rewrite;
        $permastruct_args['feed'] = $permastruct_args['feeds'];
        add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%", $permastruct_args );
    }
}
    
respondido por el Sumit 23.05.2015 - 13:46
3

¿Estás llamando a flush_rewrite_rules en cualquier momento?

Si va a cambiar el slug de un tipo de mensaje personalizado, también debe llamar a las reglas de flush_rewrite.

Puedes encontrar más documentación aquí Configuración de una publicación personalizada tipo de archivos en WP3.1? ¿Alguna suerte?

y aquí enlace

    
respondido por el Page Carbajal 21.05.2015 - 01:14

Lea otras preguntas en las etiquetas