@akf_13rm

Contact Form 7: как вывести в поле select названия произвольных типов записей?

Мне нужно чтобы на конкретной странице произвольного типа записи в select отображалось название этой записи по умолчанию.
Что у меня получилось на данный момент:
619f4563c807c214175199.png
То есть, сейчас я вывожу названия custom post types, но всегда, на всех страницах, по умолчанию выводится название записи, которая создана самой первой.
А мне нужно выводить так:
619f4781326db535621355.png
Когда находимся на странице "7 дней приключений на Гавайях" - чтобы по умолчанию в select было название именно этой страницы.

Код вывода select:
add_action( 'wpcf7_init', 'custom_add_form_tag_customlist' );

function custom_add_form_tag_customlist() {
    wpcf7_add_form_tag( array( 'customlist', 'customlist*' ), 
'custom_customlist_form_tag_handler', true );
}

function custom_customlist_form_tag_handler( $tag ) {

    $tag = new WPCF7_FormTag( $tag );

    if ( empty( $tag->name ) ) {
        return '';
    }

    $customlist = '';

    $query = new WP_Query(array(
        'post_type' => 'programs',
        'post_status' => 'publish',
        'posts_per_page' => -1,
    ));

    while ($query->have_posts()) {
        $query->the_post();
        $post_title = get_the_title();
        $customlist .= sprintf( '<option value="%1$s">%2$s</option>', 
esc_html( $post_title ), esc_html( $post_title ) );
    }

    wp_reset_query();

    $customlist = sprintf(
        '<select name="%1$s" id="%2$s">%3$s</select>', $tag->name,
    $tag->name . '-options',
        $customlist );

    return $customlist;
}


Код select в самой форме:
[customlist your-field-name]

Может кто с подобным сталкивался, помогите пожалуйста.
Или же возможно, здесь стоит использовать не cf7, а что то другое...
  • Вопрос задан
  • 350 просмотров
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
$tag = new WPCF7_FormTag( $tag );

if ( empty( $tag->name ) ) {
	return '';
}

$args = [
	'post_type' => 'programs',
	'post_status' => 'publish',
	'posts_per_page' => -1,
];

$html = '';
$options = array();

// пишем текущую запись в массив $options и исключаем из выборки get_posts()
if ( is_single() && get_post_type() === 'programs' ) {
	$args['post__not_in'][] = get_the_ID(),
	$options[] = get_the_title();
}

// берем посты из базы
if ( $posts = get_posts( $args ) ) {
	foreach ( $posts as $key => $post ) {
		$options[] = $post->post_title;
	}
}

// собираем <select>
if ( !empty( $options ) ) {
	$html .= '<select name="' . $tag->name . '" id="' . $tag->name . '-options">';
	foreach ( $options as $key => $option ) {
		$html .= '<option value="' . esc_html( $option ) . '">' . esc_html( $option ) . '</option>';
	}
	$html .= '</select>';
}

return $html;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы