Wordpress: отображение вложенных изображений с дочерних страниц конкретной страницы - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь отобразить все вложения изображений на дочерних страницах определенной родительской страницы, то есть все рисунки на страницах 10, 11 и 12.

Projects (Page ID: 5)
- Project 1 (Page ID: 10)
- Project 2 (Page ID: 11)
- Project 3 (Page ID: 12)

Это то, что у меня есть,и он работает для отображения всех изображений на сайте:

<?php 

    $args = array(
        'post_parent' => 0,
        'post_type'   => 'attachment', 
        'numberposts' => -1
    );

    $images = get_children( $args );

    if ( empty($images) ) {
        // no attachments here
    } else {
        foreach ( $images as $attachment_id => $attachment ) {
            echo wp_get_attachment_image( $attachment_id, 'full' );
        }
    }

?>

Однако, если я добавлю идентификатор родительского поста (5), ничего не появится:

<?php 

    $args = array(
        'post_parent' => 5,
        'post_type'   => 'attachment', 
        'numberposts' => -1
    );

    $images = get_children( $args );

    if ( empty($images) ) {
        // no attachments here
    } else {
        foreach ( $images as $attachment_id => $attachment ) {
            echo wp_get_attachment_image( $attachment_id, 'full' );
        }
    }

?>

Любые предложения будутдействительно полезно!

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Вот решение на основе SQL-запроса.Скопируйте следующую функцию в functions.php вашей темы

function get_children_page_attachments($parent_id) {
    global $wpdb;
    // just a precautionary typecast and check 
    $parent_id = intval( $parent_id );
    if( empty($parent_id) ) return [];

    $query = "SELECT ID FROM {$wpdb->posts} P WHERE post_type='attachment' AND P.post_parent IN (SELECT ID FROM {$wpdb->posts} WHERE post_parent={$parent_id} AND post_type='page' )";
    return $wpdb->get_results($query, 'ARRAY_A');
}

Если у вас есть функция выше в вашем functions.php, вы можете использовать ее следующим образом:

// for example the parent page id is 16
$image_ids = get_children_page_attachments(16);
foreach($image_ids as $image_id) {
    $image = wp_get_attachment_image($image_id['ID'], 'full');
}
0 голосов
/ 24 декабря 2018

Я думаю, что get_children () возвращает объекты из одного родительского поста или всех (передавая 0 в качестве значения).

Вы можете попробовать вложенный foreach, чтобы сначала получить все дочерние посты, а затем запросить вложение постранично.Вот непроверенный пример, но он дает вам представление:

<?php 

$subpages_args = array(
    'post_parent' => 5,
    'post_type'   => 'page', 
    'numberposts' => -1
);

$sub_pages = get_children( $subpages_args );

foreach( $sub_pages as $subpage_id => $sub_page) {

    $args = array(
        'post_parent' => subpage_id,
        'post_type'   => 'attachment', 
        'numberposts' => -1
    );

    $images = get_children( $args );

    if ( empty($images) ) {
        // no attachments here
    } else {
        foreach ( $images as $attachment_id => $attachment ) {
            echo wp_get_attachment_image( $attachment_id, 'full' );
        }
    }

}
?>

Удачи:)

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