Получение контента из пользовательских полей разных страниц на одной странице

Вопрос или проблема

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

<?php
    $mypages = get_pages( array(
    'sort_order' => 'ASC',
    'sort_column' => 'post_title',
    'hierarchical' => 1,
    'exclude' => '',
    'include' => '',
    'meta_key' => '',
    'meta_value' => '',
    'authors' => '',
    'child_of' => 53,
    'parent' => -1,
    'exclude_tree' => '',
    'number' => '',
    'offset' => 0,
    'post_type' => 'page',
    'post_status' => 'publish'
 ) );

    foreach( $mypages as $page ) {      
        $content = $page->post_content;
                $new = $page->get_post_custom_values('new_file');
        if ( ! $content ) // Проверка на пустую страницу
            continue;

        $content = apply_filters( 'the_content', $content );
    ?>
        <h2><a href="https://wordpress.stackexchange.com/questions/114633/<?php echo get_page_link( $page->ID ); ?>"><?php echo $page->post_title; ?></a></h2>

                        <a style="display:block; text-align: center;" title="Скачать сейчас" href="<?php $new;  ?>"><img src="<?php bloginfo('template_url'); ?>/images/new-file.png" alt="Скачать файл" /></a>


    <?php
    }   
?>

Я могу получить заголовок страницы, но не получаю значение моих пользовательских полей. Пожалуйста, помогите мне в этом вопросе. Я буду очень признателен за вашу помощь в этом отношении.

Я думаю, что ваша проблема здесь:

$new = $page->get_post_custom_values('new_file');

Вам нужно использовать:

$new = get_post_custom_values('new_file', $page->ID);

Также стоит отметить, что get_post_custom_values() возвращает массив, поэтому $new будет массивом. Я думаю, в вашем случае лучше использовать get_post_meta() следующим образом:

$new = get_post_meta($page->ID, 'new_file', true);

Ответ или решение

Чтобы получить контент из пользовательских полей различных страниц на одной странице и при этом отображать названия этих страниц, вы можете использовать следующий код:

<?php
    $mypages = get_pages( array(
        'sort_order' => 'ASC',
        'sort_column' => 'post_title',
        'hierarchical' => 1,
        'exclude' => '',
        'include' => '',
        'meta_key' => '',
        'meta_value' => '',
        'authors' => '',
        'child_of' => 53, // Укажите ID родительской страницы, если нужно
        'parent' => -1,
        'exclude_tree' => '',
        'number' => '',
        'offset' => 0,
        'post_type' => 'page',
        'post_status' => 'publish'
    ) );

    foreach( $mypages as $page ) {      
        $content = $page->post_content;
        // Используем get_post_meta для получения значения пользовательского поля
        $new = get_post_meta($page->ID, 'new_file', true);

        if ( ! $content ) // Проверяем, пустая ли страница
            continue;

        $content = apply_filters( 'the_content', $content );
?>
        <h2><a href="<?php echo get_page_link( $page->ID ); ?>"><?php echo $page->post_title; ?></a></h2>

        <?php if ( ! empty( $new ) ): ?>
            <a style="display:block; text-align: center;" title="Download Now" href="<?php echo esc_url( $new ); ?>">
                <img src="<?php bloginfo('template_url'); ?>/images/new-file.png" alt="Download the File" />
            </a>
        <?php endif; ?>

<?php
    }   
?>

Объяснение изменений:

  1. Получение пользовательского поля: В оригинальном коде использовалась строка $new = $page->get_post_custom_values('new_file');, что неправильно. Вместо этого вы должны использовать get_post_meta($page->ID, 'new_file', true);. Это отправляет запрос к базе данных и возвращает значение пользовательского поля new_file для конкретной страницы.

  2. Проверка на пустое значение: Я добавил проверку, которая отображает ссылку для скачивания только если переменная $new не пустая. Это предотвратит отображение пустой ссылки, если пользовательское поле не задано.

  3. Экранирование URL: Используется функция esc_url() для защиты от возможных XSS атак, а также для обеспечения валидных URL.

Этот код правильно извлекает заголовки страниц и соответствующее значение пользовательского поля, и выводит их в аккуратном формате на одной странице.

Оцените материал
Добавить комментарий

Капча загружается...