NEXT craftinamerica.org. Base setup for headless wordpress https://www.craftinamerica.org
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

list-renderer.php 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. class P2P_List_Renderer {
  3. static function query_and_render( $args ) {
  4. $ctype = p2p_type( $args['ctype'] );
  5. if ( !$ctype ) {
  6. trigger_error( sprintf( "Unregistered connection type '%s'.", $ctype ), E_USER_WARNING );
  7. return '';
  8. }
  9. $directed = $ctype->find_direction( $args['item'] );
  10. if ( !$directed )
  11. return '';
  12. $context = $args['context'];
  13. $extra_qv = array(
  14. 'p2p:per_page' => -1,
  15. 'p2p:context' => $context
  16. );
  17. $connected = call_user_func( array( $directed, $args['method'] ), $args['item'], $extra_qv, 'abstract' );
  18. switch ( $args['mode'] ) {
  19. case 'inline':
  20. $render_args = array(
  21. 'separator' => ', '
  22. );
  23. break;
  24. case 'ol':
  25. $render_args = array(
  26. 'before_list' => '<ol id="' . $ctype->name . '_list">',
  27. 'after_list' => '</ol>',
  28. );
  29. break;
  30. case 'ul':
  31. default:
  32. $render_args = array(
  33. 'before_list' => '<ul id="' . $ctype->name . '_list">',
  34. 'after_list' => '</ul>',
  35. );
  36. break;
  37. }
  38. $render_args['echo'] = false;
  39. $html = self::render( $connected, $render_args );
  40. return apply_filters( "p2p_{$context}_html", $html, $connected, $directed, $args['mode'] );
  41. }
  42. static function render( $list, $args = array() ) {
  43. if ( empty( $list->items ) )
  44. return '';
  45. $args = wp_parse_args( $args, array(
  46. 'before_list' => '<ul>', 'after_list' => '</ul>',
  47. 'before_item' => '<li>', 'after_item' => '</li>',
  48. 'separator' => false,
  49. 'echo' => true
  50. ) );
  51. if ( $args['separator'] ) {
  52. if ( '<ul>' == $args['before_list'] )
  53. $args['before_list'] = '';
  54. if ( '</ul>' == $args['after_list'] )
  55. $args['after_list'] = '';
  56. }
  57. if ( !$args['echo'] )
  58. ob_start();
  59. echo $args['before_list'];
  60. if ( $args['separator'] ) {
  61. $rendered = array();
  62. foreach ( $list->items as $item ) {
  63. $rendered[] = self::render_item( $item );
  64. }
  65. echo implode( $args['separator'], $rendered );
  66. } else {
  67. foreach ( $list->items as $item ) {
  68. echo $args['before_item'] . self::render_item( $item ) . $args['after_item'];
  69. }
  70. }
  71. echo $args['after_list'];
  72. if ( !$args['echo'] )
  73. return ob_get_clean();
  74. }
  75. private static function render_item( $item ) {
  76. return html_link( $item->get_permalink(), $item->get_title() );
  77. }
  78. }