web-dev-qa-db-fra.com

Global $ post affiche la valeur null dans certaines de mes pages d'archivage de types de publications personnalisées

Mon anglais n'est pas très beau.
J'ai plusieurs types de messages personnalisés, noticias (nouvelles), 'articulos' (articles), etc. Dans mon functions.php, je mets en file d'attente les scripts et les styles par post_id ou post_type en utilisant un code comme celui-ci:

function mahg_scripts_by_page() {
    global $post;
    $page_id = $post->ID;
    $post_type = $post->post_type; // var_dump($post_type);

    $noti = 'noticia';      // POST-TYPE noticia
    $arti = 'articulo'; // POST-TYPE articulo
    $com1 = 4;              // that page id
    $com2 = 6;              // that other page id
 // $etc if i needed

    $front_commons = array($noti, $arti, $com1, $com2, $etc);
    if ( is_home() || is_404() || is_single() || in_array($page_id, $front_commons, true) ) {   
        wp_register_style('uikit_css', get_template_directory_uri().'/css/uikit.css', array(), '', 'all' );
        wp_enqueue_style('uikit_css');  
        wp_register_script('uikit_js', get_template_directory_uri().'/js/uikit.min.js','','', true );
        wp_enqueue_script('uikit_js');

    if (is_home() ) {
        wp_register_style('slideshow_css', get_template_directory_uri().'/css/components/slideshow.css', array(), '', 'all' );
        wp_enqueue_style('slideshow_css');
        wp_register_script('slideshow_js', get_template_directory_uri().'/js/components/slideshow.min.js','','', true );
        wp_enqueue_script('slideshow_js');
    }
    // more scripts or styles from here     
}
add_action('wp_enqueue_scripts', 'mahg_scripts_by_page' );

J'ai créé archive-noticia.php et archive-articulo.php dans mon dossier de thèmes. Mais lorsque le site Web est lancé, le navigateur charge les scripts et les styles dans la page d’archive articulo, mais pas dans la page d’archive noticia. Quand je fais var_dump($post_type); montre 'articulo' (length=8) dans la page d'archive articulo. Mais affiche null dans la page d’archive noticia et les autres types de publication personnalisés.
Lorsque j'ai créé la register_post_type( 'articulo', $args);, has_archive était défini sur true. Même chose en noticia.

$singular = 'Artículo';
$plural = 'Artículos';
$labels = array(
    'name'                  => $plural,
    'singular_name'         => $singular,
    'add_new'               => 'Nuevo ' . $singular,
    'add_new_item'          => 'Agregar nuevo ' . $singular,
    'edit'                  => 'Editar',
    'edit_item'             => 'Editar ' . $singular,
    'new_item'              => 'Nuevo ' . $singular,
    'view'                  => 'Ver ' . $singular,
    'view_item'             => 'Ver ' . $singular,
    'search_term'           => 'Buscar ' . $plural,
    'parent'                => 'Parent ' . $singular,
    'not_found'             => 'No se han encontrado ' . $plural,
    'not_found_in_trash'    => 'No hay ' . $plural .' en la papelera'
);
$args = array(
    'labels'              => $labels,
    'public'              => true,
    'publicly_queryable'  => true,
    'exclude_from_search' => false,
    'show_in_nav_menus'   => false,
    'show_ui'             => true,
    'show_in_menu'        => true, 
    'show_in_admin_bar'   => false,
    'menu_position'       => 7,
    'menu_icon'           => 'dashicons-media-spreadsheet',
    'can_export'          => true,
    'delete_with_user'    => false,
    'hierarchical'        => true,
    'has_archive'         => true,
    'query_var'           => true,
    'capability_type'     => 'post',
    'map_meta_cap'        => true,
    'rewrite'             => true,
    'rewrite' => array( 
        'slug'          => 'articulos', 
        'with_front'    => true,
        'pages'         => true,
        'feeds'         => false,
    ),
    'supports' => array('title','editor','thumbnail','excerpt')
);
register_post_type( 'articulo', $args);

$singular = 'Noticia';
$plural = 'Noticias';
$labels = array(
    'name'                  => $plural,
    'singular_name'         => $singular,
    'add_new'               => 'Nueva ' . $singular,
    'add_new_item'          => 'Agregar nueva ' . $singular,
    'edit'                  => 'Editar',
    'edit_item'             => 'Editar ' . $singular,
    'new_item'              => 'Nueva ' . $singular,
    'view'                  => 'Ver ' . $singular,
    'view_item'             => 'Ver ' . $singular,
    'search_term'           => 'Buscar ' . $plural,
    'parent'                => 'Parent ' . $singular,
    'not_found'             => 'No se han encontrado ' . $plural,
    'not_found_in_trash'    => 'No hay ' . $plural .' en la papelera'
);
$args = array(
    'labels'              => $labels,
    'public'              => true,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'show_ui'             => true,
    'show_in_nav_menus'   => false,
    'show_in_menu'        => true,
    'show_in_admin_bar'   => false,
    'menu_position'       => 6,
    'menu_icon'           => 'dashicons-media-document',
    'capability_type'     => 'post',
    'map_meta_cap'        => true,
    'hierarchical'        => true,
    'supports'            => array('title','editor','thumbnail','excerpt'), 
    'has_archive'         => true,
    'rewrite'             => true,    
    'rewrite' => array( 
            'slug'              => 'noticias',
            'with_front'        => true,
            'pages'             => true,
            'feeds'             => false,
    ),
    'query_var'           => true,
    'can_export'          => true,
    'delete_with_user'    => false,
);
register_post_type( 'noticia', $args);

Pourquoi wordpress fait ça? Qu'est-ce que je fais mal?

1
mhuenchul

L'objet global $post représente la publication actuelle dans La boucle est créée par la fonction the_post(). Il permet aux fonctions telles que the_title(), the_content() etc. d'afficher le titre et le contenu de la publication en cours sans avoir à passer d'identifiant ou quoi que ce soit.

C'est pourquoi une archive de type publication n'a pas d'objet $post lorsque vous mettez des scripts en file d'attente. Pourquoi le ferait-il? Quel poste cela représenterait-il? Que serait $post->post_author pour une archive de type publication? Cela n'a pas de sens d'en avoir un, car une archive n'est pas un message.

La solution correcte est celle que vous avez trouvée: La fonction is_post_type_archive(). Sous le capot, il vérifie le Requête principal pour voir s'il s'agit de l'archive d'un type de publication.

0
Jacob Peattie