Skip Navigation

[Resolved] next and previous with two custom post

This support ticket is created 3 years, 10 months ago. There's a good chance that you are reading advice that it now obsolete.

This is the technical support forum for Toolset - a suite of plugins for developing WordPress sites without writing PHP.

Everyone can read this forum, but only Toolset clients can post in it. Toolset support works 6 days per week, 19 hours per day.

Sun Mon Tue Wed Thu Fri Sat
9:00 – 13:00 9:00 – 13:00 9:00 – 13:00 9:00 – 13:00 - - 9:00 – 13:00
14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 14:00 – 18:00 - - 14:00 – 18:00

Supporter timezone: Africa/Casablanca (GMT+01:00)

This topic contains 25 replies, has 3 voices.

Last updated by kayser 3 years, 10 months ago.

Assisted by: Jamal.

Author
Posts
#1963971

Minesh I need navigation on this page
hidden link
the page of the book
not on the artist's page which is fine with the choice of all these thumbnails

#1964007

Minesh
Supporter

Languages: English (English )

Timezone: Asia/Kolkata (GMT+05:30)

Ok - better, you know French - right? If yes, I can pass the ticket to supporter who can support you in French to avoid this language issue. Sounds good?

#1964011

OK and Thank you

#1964467

Bonjour! Minesh m'a demandé de continuer avec vous sur ce ticket en français.

Du moment que nous n'avons pas encore ouvert le forum français, je préfère qu'on continue on anglais. Pour que d'autres utilisateurs peuvent y trouver la réponse à leur besoins aussi.

En lisant le ticket je pense que vous avez besoin d'implémenter un shortcode personnalisé pour le faire. Sur le ticket suivant vous trouverez un shortcode personnalisé, proposé par Christian qui permet de générer les liens Next/Previous des posts "frères" par rapport à une relation Toolset.
https://toolset.com/forums/topic/next-and-previous-sibling-posts-in-a-one-to-many-post-relationship/

J'ai essayé d'implementer ce shortcode sur votre site, mais je rencontre des problème lors de l'enregistrement de la content template. Le boutton "Mettere à jour" ne s'active pas systématiquement. Et je ne sais pas comment le réactiver. C'est d'ailleurs très bizarre.
hidden link

Je pense qu'il y a une erreur de copier/coller avec les double guillemets et les simples guillemets, mais avec ce problème d'enregistrement, je n'arrive pas à travailler dessus. Quand j'active le bout de code que j'ai ajouté sur Toolset->Paramètres->Code personnalisé, la page ne fonctionne plus et devienne blanche.

Ci dessous les shortcodes qu'il faut utiliser, j'ai mis le slug de la relation Artists<>Livres:
- Previous link:

[tssupp-next-prev-child step='-1' relslug='livre_artiste' current='[wpv-post-id]'][/tssupp-next-prev-child]

- Next link:

[tssupp-next-prev-child step='1' relslug='livre_artiste' current='[wpv-post-id]'][/tssupp-next-prev-child]

Je vous laisse le soin d'essayer de votre coté, et de voir si vous pouvez le régler. Si ça ne marche pas, j'aurais besoin de prendre une copie de votre site et de travailler locallement. Comme ça je peux désactiver d'autres extensions et changer de thème pour essayer de faire fonctionner le boutton "Mettre à jour".
Et aussi pour déboguer s'il y a une erreur(copier/coller) sur le bout de code. par ce que je soupçonne que le code fonctionne pour une relation one-to-many et non pas une relation many-to-many que vous avez actuellement.

#1965145
Capture d’écran 2021-02-24 085741.jpg

Bonjour Jamal
Pour le bouton Mettre à jour bloqué, la seule solution que j'ai trouvé
c'est d'activer l'éditeur de code et ensuite de revenir à l'éditeur visuel
et le bouton Mettre à jour est actif
Mystère
Guy

#1968003

Toutes mes excuses pour la réponse tardive, mais je ne travaille pas les mercredis et jeudis.

Basculer entre l'éditeur de code et l'éditeur de block n'active pas systématiquement le bouton mise à jour. J'avais aussi pu l'activer en basculant entre la vue bureau/tabletter/phone, mais ce n'est pas systématique non plus.

En activant le code personnalisé pour le shortcode la page devient toute blanche et rien n'est généré à part le menu de l'entête.
J'aimerais bien prendre une copie de votre site et travailler dessus localement. J'aurais la chance de désactiver toutes les autres extensions et d'utiliser une thème par défaut. J'aurais aussi la change de déboguer plus facilement que de le faire directement sur votre site. Et pour cela j'aurais besoin de votre accord avant de pouvoir prendre une copie. Est ce possible?

#1968005

Bonjour
Pas de problème
Allez y
Guy

#1968801

Bonjour Guy,

Comme la relation actuelle entre artists et livre est une relation many-to-many, il est peut être impossible de savoir correctement quel livre est le précédent ou suivant. Surtout quand le livre actuel est relié à plusieurs artists, avec quel artist on devrait chercher?

Alors j'ai créé un bout de code qui va chercher les livres du premier artiste lié au livre courant et j'ai pu générer correctement le précédent et suivant livres. Voir cette capture d'écran hidden link

Le bout de code qui a permis de le faire est le suivant:

// get a link to the next or previous sibling post in child post content template
// example: [tssupp-next-prev-child current="[wpv-post-id]" step="1" relslug="book-chapter"][/tssupp-next-prev-child]
// @current: current post id
// @step: 1 for next or -1 for previous
// @relslug: slug of the post relationship
  
function tssupp_next_prev_child($atts) {
  $a = shortcode_atts( array(
    'current' => 0,
    'step' => '1',
    'relslug' => '',
  ), $atts );
  $link = '';
  
  // get all child posts
  $relationship_slug = $a['relslug'];
  $current_child_id = $a['current'];
  $parent_id = toolset_get_related_posts( (int) $current_child_id, $relationship_slug, array( 'query_by_role' => 'parent', 'return' => 'post_id' ) );
  $sibling_args = array(
    'query_by_role'=>'child',
    'limit'=>1000,
    'return' => 'post_id'
  );
  if ( count( $parent_id ) > 0 ) $parent_id = $parent_id[0];
  $siblings = toolset_get_related_posts( $parent_id, $relationship_slug, $sibling_args );
  
  // loop over child posts and get index of the current post
  foreach($siblings as $i=>$sibling) {
    if( $sibling == $current_child_id ) {
      break;
    }
  }
  
  // increment or decrement index for next or previous sibling
  $i += $a['step'];
  
  // create link to next/previous sibling
  if(isset($siblings[$i])){
    $perm = get_the_permalink( $siblings[$i] );
    $title = get_the_title( $siblings[$i] );
    $link .= $a['step']=='1' ? "Next: " : "Previous: ";
    $link .= "<a href='" . $perm . "'>" . $title . "</a>";
  }
  
  // output the link, or empty string if not set
  return $link;
}
add_shortcode( 'tssupp-next-prev-child', 'tssupp_next_prev_child' );

Sur la ligne 24, on prent le premier artiste(parent post) lié au livre courant:

if ( count( $parent_id ) > 0 ) $parent_id = $parent_id[0];

Pour personnaliser les mots (Previous/Next) vous pouvez le modifier sur les dernière lignes du bout de code:

  // create link to next/previous sibling
  if(isset($siblings[$i])){
    $perm = get_the_permalink( $siblings[$i] );
    $title = get_the_title( $siblings[$i] );
    $link .= $a['step']=='1' ? "Next: " : "Previous: ";
    $link .= "<a href='" . $perm . "'>" . $title . "</a>";
  }
#1969413

Merci Jamal
C'est exactement ce que je veux.
Mais quand j'essaie d'éditer un livre j'ai une erreur critique
hidden link
hidden link
Guy

#1969465

Le code ne gérait pas un cas ou il n'existe pas de post parent, ce qui arrive sur l'éditeur de block. Alors j'ai mis à jour la ligne 24 pour gérer ce cas:

  if ( count( $parent_id ) > 0 ) {
	  $parent_id = $parent_id[0];
  } else {
	  return '';
  }

Maintenant on peut éditer un libre sans soucis.

#1969471

My issue is resolved now. Thank you!