web-dev-qa-db-ja.com

一部の私のカスタム投稿タイプのアーカイブページでグローバル$ postがnullを表示する

私の英語は見栄えがよくありません。
私はいくつかのカスタム投稿タイプ、 'noticias'(ニュース) 'articulos'(記事)などを持っています。

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

私のテーマフォルダにarchive-noticia.phparchive-articulo.phpを作成しました。しかし、Webサイトを実行すると、ブラウザはarticuloアーカイブページにスクリプトとスタイルをロードしますが、noticiaアーカイブページにはロードしません。 var_dump($post_type);を実行すると、articuloアーカイブページに'articulo' (length=8)が表示されます。しかし、noticiaアーカイブページと他のカスタム投稿タイプにnullを表示します。
私がregister_post_type( 'articulo', $args);を実行したとき、has_archiveはtrueに設定されていました。 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);

なぜワードプレスはそれをするのですか?何が悪いの?

1
mhuenchul

グローバルな$postオブジェクトは、 The Loop 内の現在の投稿を表し、the_post()関数によって作成されます。これにより、the_title()the_content()などの関数は、IDなどを渡す必要なしに現在の投稿のタイトルとコンテンツを表示できます。

スクリプトをエンキューしているときにポストタイプアーカイブに$postオブジェクトが設定されていないのはこのためです。なぜでしょう?それはどんな記事を表しますか?投稿タイプのアーカイブの場合、$post->post_authorはどうなりますか?アーカイブは投稿ではないので、持っているのは意味がありません。

正しい解決策はあなたが見つけたものです:is_post_type_archive()関数。ボンネットの下で、メインの Query をチェックして、投稿タイプのアーカイブ用かどうかを確認します。

0
Jacob Peattie

私は同様の問題を抱えています。YoastSEOとその作品を無効にするのに苦労した後、グローバルな$ postは無料のテーマで無効です(astrid)。

そこで、Yoast SEOを更新し、協力しています。しかし、正直に言うと、私はYoastを他の何かに変更して、このプラグインで多くの問題を引き起こします。

その助けを願っています:-)

編集:複数のテストの後、問題がYoastから来るかわかりません(しかし、私はそれを変更します)... Yoastを有効にした後にカスタム投稿タイプを作成すると、この問題が発生します... ;-)

0
Mepps