Функция для замены отображения контента для пользовательского типа сообщения

Я пытался создать функцию для замены отображения содержимого для пользовательской темы сообщения WordPress Storefront, но условия не работали! Комментарии, если я пытался.

//if (is_singular() && (get_post_type() == 'gallery')) {
add_action( 'init', 'customise_storefront' );
//}


function customise_storefront() {

    //if(get_post_type( $post->ID ) == 'gallery'){
    //if('gallery'== get_post_type()) {
    //if (is_singular('gallery')) {
    //if (is_single('gallery')) {
    //if (is_singular() && (get_post_type() == 'gallery')) {
       // Remove the storefromt post content function
       remove_action( 'storefront_single_post', 'storefront_post_content', 30 );
       remove_action( 'storefront_loop_post', 'storefront_post_content', 30 );
       // Add our own custom function
       add_action( 'storefront_single_post', 'gallery_post_content', 30 );
       add_action( 'storefront_loop_post', 'gallery_post_content', 30 );
    //}
}

/* Gallery post content*/
if ( ! function_exists( 'gallery_post_content' ) ) {
    function gallery_post_content() {
       ?>
            <div class="entry-content" itemprop="articleBody">
            <?php
            the_content(
                sprintf(
                    __( 'Continue reading %s', 'storefront' ),
                    '<span class="screen-reader-text">' . get_the_title() . '</span>'
                )
            );

            wp_link_pages( array(
                'before' => '<div class="page-links">' . __( 'Pages:', 'storefront' ),
                'after'  => '</div>',
            ) );
            ?>
            </div><!-- .entry-content -->
            <?php

2 ответа

add_action( 'template_redirect', 'customise_storefront' );



function customise_storefront() {
    if (is_singular('gallery')) {
       // Remove the storefromt post content function
       remove_action( 'storefront_single_post', 'storefront_post_content', 30 );
       remove_action( 'storefront_loop_post', 'storefront_post_content', 30 );
       // Add our own custom function
       add_action( 'storefront_single_post', 'gallery_post_content', 30 );
       add_action( 'storefront_loop_post', 'gallery_post_content', 30 );
    }
}

/* Gallery post content*/
if ( ! function_exists( 'gallery_post_content' ) ) {
    function gallery_post_content() {
       ?>
            <div class="entry-content" itemprop="articleBody">
            <?php
            the_content(
                sprintf(
                    __( 'Continue reading %s', 'storefront' ),
                    '<span class="screen-reader-text">' . get_the_title() . '</span>'
                )
            );

            wp_link_pages( array(
                'before' => '<div class="page-links">' . __( 'Pages:', 'storefront' ),
                'after'  => '</div>',
            ) );
            ?>
            </div><!-- .entry-content -->
            <?php
    }
}

Вы подключаете свое действие к init. На данный момент нет доступных данных, поэтому ваши тесты if не пройдены. Попробуйте использовать более позднюю ловушку после загрузки данных поста, например

add_action('the_post','customise_storefront');

Вам также следует включить глобальную ссылку $ post в начале customise_storefront, если вы собираетесь попробовать получить доступ к объекту $ post там.

Хотя если вы используете хук the_post, он все равно передает объект post по ссылке, так что вы можете изменить его на:

function customise_storefront ($post_object) {
    if (get_post_type ($post_object->ID) ...

Смотрите https://codex.wordpress.org/Plugin_API/Action_Reference/the_post

Другие вопросы по тегам