Как сделать так, чтобы пользовательские типы сообщений отображались при публикации - PullRequest
0 голосов
/ 25 февраля 2019

Мне трудно выполнить две вещи.Я создал собственный тип записи для событий.Я хотел бы, чтобы клиент мог опубликовать событие к дате.Это означает публикацию сообщений, которые запланированы на будущее, чтобы быть опубликованными.Я также хотел бы, чтобы сообщения вернулись к черновикам после того, как дата истекла.Кто-нибудь знает, как этого добиться?Вот код, с которым я играю:

<?php 

// Регистрация пользовательского типа сообщения: События Сообщения

add_action ('init', 'events_register');

function events_register () {

$labels = array(
    'name' => _x('Events', 'post type general name'),
    'singular_name' => _x('Event', 'post type singular name'),
    'add_new' => _x('Add New', 'Event item'),
    'add_new_item' => __('Add New Event'),
    'edit_item' => __('Edit Event'),
    'new_item' => __('New Event'),
    'view_item' => __('View Event Item'),
    'search_items' => __('Search Events'),
    'not_found' =>  __('Nothing found'),
    'not_found_in_trash' => __('Nothing found in Trash'),
    'parent_item_colon' => ''
);

$args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'query_var' => true,
    'menu_icon' => 'dashicons-calendar-alt',
    'rewrite' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'menu_position' => 4,
    'supports' => array('title','editor','thumbnail')
  ); 

register_post_type( 'events' , $args );

function setup_future_hook() {
    // Replace native future_post function with replacement
        remove_action('future_events','_future_post_hook');
        add_action('future_events','publish_future_post_now');
    }

    function publish_future_post_now($id) {
    // Set new post's post_status to "publish" rather than "future."
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');

}

Это мой цикл:

<?php // WP_Query arguments
            $args = array (
            'post_type'              => array( 'events' ),
            'order'                  => 'ASC',
            'posts_per_page'         => '4',
            );

            // The Query
            $query = new WP_Query( $args );

            // The Loop
            if ( $query->have_posts() ) {
            while ( $query->have_posts() ) {
            $query->the_post(); ?>
            <div class="col-md-6">
                <div class="event-box">
                    <h4><?php the_title(); ?></h4>
                    <h5><?php the_field('venue_name'); ?></h5>
                    <div class="date"><?php the_date( 'F j, Y' ); ?></div> 
                    <div class="time"><?php the_field('event_time'); ?></div>
                    <div class="row">
                        <div class="col-6">
                            <a target="_blank" class="btn btn-primary" href="<?php the_field('buy_tickets_link'); ?>">Buy Tickets</a>
                        </div>
                        <div class="col-6">
                            <a target="_blank" class="btn btn-primary" href="<?php the_field('venue_link'); ?>">Venue Info</a>
                        </div>
                    </div>
                </div>
            </div>

            <?php }
            } else {
            // no posts found
            }

            // Restore original Post Data
            wp_reset_postdata(); ?>

Спасибо !!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Если вы хотите отображать только будущие сообщения, попробуйте изменить аргументы WP_Query следующим образом:

$args = array (
    'post_type'      => 'events',
    'order'          => 'ASC',
    'posts_per_page' => '4',
    'post_status'    => 'future',
);

Кроме того, вы можете рассмотреть возможность использования плагина событий для этой функции;как Календарь событий .

0 голосов
/ 25 февраля 2019
        $args = array (
            'post_type'              => array( 'events' ),
            'order'                  => 'ASC',
            'posts_per_page'         => '4',
            'post_status' => array('publish', 'future'),
        );

Попробуйте добавить 'post_status' => array('publish', 'future') в качестве аргумента.Дайте мне знать, сработало ли это или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...