[WP] Wp_query haalt geen resultaten van posttype 'page' op.

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Zeror
  • Registratie: September 2003
  • Laatst online: 07-10 22:55

Zeror

Ik Henk 'm!

Topicstarter
Ik ben momenteel bezig om voor een Wordpress site een custom loop te maken. Ik krijg het alleen nog niet voor elkaar. Ik zit vast op één puntje.

Wat ik wil bereiken is als volgt:
Ik laat een overzicht zien van alle aanwezige categorieën, ook als deze geen posts of pages bevatten. Pages heb ik net als posts ondersteuning gegeven voor categorieën dmv een functie in functions.php.
Bij elke categorie wil naast wat basisinfo zoals categorienaam, nog wat toevoegen, namelijk de thumbnail van de laatst geplaatste post of page met een fallback image indien geen. Maar daar gaat het mis. Mijn query lijkt niet zijn werk te doen. Ik krijg namelijk alleen maar de resultaten van posts te zien en niet die van pages. Ook wanneer enkel om pages vraag in mijn wp_query.

Vraag: Hoe krijg ik de resultaten voor de post_type page in mijn wp_query?

Note: Ondanks dat ik van zowel posts als pages resultaten wil zien, wil ik voor nu even focussen op pages aangezien ik daar problemen mee heb.

Ik gebruik de volgende code voor de loop (ik heb de html output code even weggelaten):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$categories = get_categories( array(
    'orderby'           => 'id',
    'order'             => 'ASC',
    'hide_empty'        => FALSE
) );  

foreach( $categories as $category ) {

    $category_link = sprintf( 
        '<a href="%1$s">%2$s [%3$s]</a>',
        esc_url( get_category_link( $category->term_id ) ),
        esc_html( $category->name ),
        esc_html( $category->term_id )
    );

    $p_thumbnails = array(
            'post_type'         => 'page',
            'order'             => 'DESC',
            'orderby'           => 'date',
            'post_per_page'     => 1,
            'cat'               => $category->term_id,
            'meta_query'        => array(
                array(
                    'key'       => '_thumbnail_id',
                    'compare'   => 'EXISTS'
                ),
            ),
        );
    $pthumbs = new WP_Query($p_thumbnails);                                    

    if ( $pthumbs->have_posts() ) :
        $imagePath = get_the_post_thumbnail_url( get_the_ID(), 'fp-category-thumbnail' ); 
    else :
        $imagePath = 'https://lumiere-a.akamaihd.net/v1/images/image_76e1e8c7.jpeg';
    endif;
    ?> 

<?php wp_reset_query(); wp_reset_postdata();
} //end foreach ?>

En de function in functions.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function add_taxonomies_to_pages() {
 register_taxonomy_for_object_type( 'post_tag', 'page' );
 register_taxonomy_for_object_type( 'category', 'page' );
 }
add_action( 'init', 'add_taxonomies_to_pages' );
 if ( ! is_admin() ) {
 add_action( 'pre_get_posts', 'category_and_tag_archives' );
 
 }
function category_and_tag_archives( $wp_query ) {
$my_post_array = array('post','page');
 
 if ( $wp_query->get( 'category_name' ) || $wp_query->get( 'cat' ) )
 $wp_query->set( 'post_type', $my_post_array );
 
 if ( $wp_query->get( 'tag' ) )
 $wp_query->set( 'post_type', $my_post_array );
}




Dit heb ik al geprobeerd:

1) if statement veranderd naar:
PHP:
1
2
3
if ( has_post_thumbnail() ) { // check if the post has a Post Thumbnail assigned to it.
    the_post_thumbnail_url();
}


2) Ondanks er al theme support voor thumbnails aanwezig is, nog eens benoemd speciaal voor page.
PHP:
1
add_theme_support( 'post-thumbnails', array( 'page' ) );


3) Ipv get_the_post_thumbnail_url() deze wp_get_attachment_image_src() gebruiken.
PHP:
1
$imagePath = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'fp-category-thumbnail' );


Deze 3 dingen geven geen oplossing. Ik zie inmiddels de bomen door het bos niet meer.

Wie kan mij helpen?

Trans-life! :::: Nintendo ID: Zeror_rk / SW-6670-3316-6323 :::: BattleTag: Zerora#21213 :: Twitch: ZERORAh

Beste antwoord (via RobIII op 29-08-2017 15:04)


  • Zeror
  • Registratie: September 2003
  • Laatst online: 07-10 22:55

Zeror

Ik Henk 'm!

Topicstarter
Ik heb inmiddels de oplossing gevonden. :)

Mijn WP_Query was in orde, maar het probleem zat in mijn if-else statement. Deze is nu zo en daarmee krijg ik dus de juiste info terug. Met de onderstaande query vraag je dus alle pages met een uitgelichte afbeelding op binnen een opgegeven categorie.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$p_thumbnails = new WP_Query( array(
    'post_type'         => 'page',
    'post_status'       => 'publish',
    'order'             => 'ASC',
    'orderby'           => 'date',
    'post_per_page'     => 1,
    'cat'               => $category->term_id, //category id
    'meta_query'        => array(
        array(
            'key'       => '_thumbnail_id',
            'compare'   => 'EXISTS'
        ),
    ),
));

if( $p_thumbnails->have_posts() ) : 
    while( $p_thumbnails->have_posts() ) : $p_thumbnails->the_post();
        $src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'fp-category-thumbnail' );
        $imagePath = $src[0];
    endwhile;
else :
    $imagePath = 'https://lumiere-a.akamaihd.net/v1/images/image_76e1e8c7.jpeg'; //placeholder 
endif;

[ Voor 6% gewijzigd door Zeror op 29-08-2017 15:08 ]

Trans-life! :::: Nintendo ID: Zeror_rk / SW-6670-3316-6323 :::: BattleTag: Zerora#21213 :: Twitch: ZERORAh

Alle reacties


Acties:
  • 0 Henk 'm!

  • kaassouffle
  • Registratie: Januari 2002
  • Laatst online: 07-10 16:43

kaassouffle

Medewerker v/d Maand

Hoe kom je aan de functie in je functions.php ? Hier iemand die het ook niet lukt en met een iets andere functies komt: https://stackoverflow.com...egories-and-tags-on-pages (niet het gekozen antwoord, maar die er onder)

Lijkt hetzelfde te doen als jouw functie, maar niet de ! is admin ?


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// add tag and category support to pages
function tags_categories_support_all() {
  register_taxonomy_for_object_type('post_tag', 'page');
  register_taxonomy_for_object_type('category', 'page');  
}

// ensure all tags and categories are included in queries
function tags_categories_support_query($wp_query) {
  if ($wp_query->get('tag')) $wp_query->set('post_type', 'any');
  if ($wp_query->get('category_name')) $wp_query->set('post_type', 'any');
}

// tag and category hooks
add_action('init', 'tags_categories_support_all');
add_action('pre_get_posts', 'tags_categories_support_query');

[ Voor 5% gewijzigd door kaassouffle op 15-08-2017 21:58 ]


Acties:
  • 0 Henk 'm!

  • Zeror
  • Registratie: September 2003
  • Laatst online: 07-10 22:55

Zeror

Ik Henk 'm!

Topicstarter
kaassouffle schreef op dinsdag 15 augustus 2017 @ 21:56:
Hoe kom je aan de functie in je functions.php ? Hier iemand die het ook niet lukt en met een iets andere functies komt: https://stackoverflow.com...egories-and-tags-on-pages (niet het gekozen antwoord, maar die er onder)

Lijkt hetzelfde te doen als jouw functie, maar niet de ! is admin ?
Ik heb de code snippet hier vandaan:

http://spicemailer.com/wo...ies-tags-pages-wordpress/
We make sure that the query is not modified in the admin view. We use the !is_admin() check for this.

[ Voor 9% gewijzigd door Zeror op 15-08-2017 22:07 ]

Trans-life! :::: Nintendo ID: Zeror_rk / SW-6670-3316-6323 :::: BattleTag: Zerora#21213 :: Twitch: ZERORAh


Acties:
  • 0 Henk 'm!

  • bonzen
  • Registratie: Oktober 2003
  • Laatst online: 15-09 17:35
Krijg je wel het juiste ID terug?
Probeer eens:
PHP:
1
2
3
4
5
6
7
8
$imagePath = wp_get_attachment_image_src(get_post_thumbnail_id(get_post()->ID),  'fp-category-thumbnail')[0];
/* wp_get_attachment_image_src() geeft een array terug:
  $imagepath(
    [0] => "src",
    [1] => width,
    [2] => height
  )
*/

BTO


Acties:
  • 0 Henk 'm!

  • Zeror
  • Registratie: September 2003
  • Laatst online: 07-10 22:55

Zeror

Ik Henk 'm!

Topicstarter
bonzen schreef op vrijdag 18 augustus 2017 @ 10:57:
Krijg je wel het juiste ID terug?
Probeer eens:
PHP:
1
2
3
4
5
6
7
8
$imagePath = wp_get_attachment_image_src(get_post_thumbnail_id(get_post()->ID),  'fp-category-thumbnail')[0];
/* wp_get_attachment_image_src() geeft een array terug:
  $imagepath(
    [0] => "src",
    [1] => width,
    [2] => height
  )
*/
Ik ga deze volgende week even proberen. Ik kan hier pas dinsdag weer aan werken. Dan laat ik het je weten. ;)

Trans-life! :::: Nintendo ID: Zeror_rk / SW-6670-3316-6323 :::: BattleTag: Zerora#21213 :: Twitch: ZERORAh


Acties:
  • 0 Henk 'm!

  • b2vjfvj75gjx7
  • Registratie: Maart 2009
  • Niet online
Bekijk gewoon je database via Navicat of iets dergelijks en schrijf een default / native PHP mySQL query...

Het heeft niets met WordPress te maken;

Je roept nu een WP-function aan die weer een native PHP query doorschiet; dan kan je beter direct die PHP query schrijven en de hele WP API overrulen (wel zo handig, mocht WP de API ooit aanpassen).

Het is geen rocket-science; gewoon de database-layering inspecten via Navicat (of wat dan ook) en daar je mySQL query op aanpassen... klaar.

Acties:
  • 0 Henk 'm!

  • Zeror
  • Registratie: September 2003
  • Laatst online: 07-10 22:55

Zeror

Ik Henk 'm!

Topicstarter
Ik ben gisteren nog even aan het spelen geweest.
Ik vermoed dat mijn WP_Query wel correct is, want hij ziet wel welke categorie pagina's heeft met een featured image. Dat is nadat ik de functie category_and_tag_archives verwijderd heb uit functions.php.
Echter krijg ik de gewenste featured image nog steeds niet terug als URL. Ik krijg wel de thumbnail url van het laatste blogbericht.

@bonzen Ik krijg dus niet het juiste ID terug. De query lijkt correct, maar ID opvragen blijft een probleem. Is leeg volgens mij.

@b2vjfvj75gjx7 Heb gisteren wel even DBeaver geinstalleerd om eens te kijken, maar wist niet echt wat ik aan het doen was. Dus hier ga ik pas weer naar kijken als ik er via de andere methode echt niet uitkom. Heb wel het idee dat ik dichterbij ben nu.

[ Voor 33% gewijzigd door Zeror op 23-08-2017 12:20 ]

Trans-life! :::: Nintendo ID: Zeror_rk / SW-6670-3316-6323 :::: BattleTag: Zerora#21213 :: Twitch: ZERORAh


Acties:
  • 0 Henk 'm!

  • b2vjfvj75gjx7
  • Registratie: Maart 2009
  • Niet online
Zeror schreef op woensdag 23 augustus 2017 @ 09:37:
@b2vjfvj75gjx7 Heb gisteren wel even DBeaver geinstalleerd om eens te kijken, maar wist niet echt wat ik aan het doen was. Dus hier ga ik pas weer naar kijken als ik er via de andere methode echt niet uitkom. Heb wel het idee dat ik dichterbij ben nu.
DBeaver of Navicat of welk (portable) SQL Inspector leert je echt veel van WordPress :)

Tenminste; pas toen ik dat ging doen, kwam ik achter de logica en werking van WordPress en schrijf ik sindsdien gewoon (bij voorkeur) custom SQL-queries (CMS agnostisch) zonder die gare WP API's in te moeten zetten (die uiteindelijk een functie zijn voor de custom SQL-queries).

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Zeror
  • Registratie: September 2003
  • Laatst online: 07-10 22:55

Zeror

Ik Henk 'm!

Topicstarter
Ik heb inmiddels de oplossing gevonden. :)

Mijn WP_Query was in orde, maar het probleem zat in mijn if-else statement. Deze is nu zo en daarmee krijg ik dus de juiste info terug. Met de onderstaande query vraag je dus alle pages met een uitgelichte afbeelding op binnen een opgegeven categorie.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$p_thumbnails = new WP_Query( array(
    'post_type'         => 'page',
    'post_status'       => 'publish',
    'order'             => 'ASC',
    'orderby'           => 'date',
    'post_per_page'     => 1,
    'cat'               => $category->term_id, //category id
    'meta_query'        => array(
        array(
            'key'       => '_thumbnail_id',
            'compare'   => 'EXISTS'
        ),
    ),
));

if( $p_thumbnails->have_posts() ) : 
    while( $p_thumbnails->have_posts() ) : $p_thumbnails->the_post();
        $src = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'fp-category-thumbnail' );
        $imagePath = $src[0];
    endwhile;
else :
    $imagePath = 'https://lumiere-a.akamaihd.net/v1/images/image_76e1e8c7.jpeg'; //placeholder 
endif;

[ Voor 6% gewijzigd door Zeror op 29-08-2017 15:08 ]

Trans-life! :::: Nintendo ID: Zeror_rk / SW-6670-3316-6323 :::: BattleTag: Zerora#21213 :: Twitch: ZERORAh

Pagina: 1