Bearbeiten Yoast SEO Breadcrumbs-Ausgabe

Ich möchte die Ausgabe von Yoast SEO Breadcrumbs anpassen, ich habe das bisher, was super funktioniert:

add_filter( 'wpseo_breadcrumb_single_link', 'ss_breadcrumb_single_link', 10, 2 ); function ss_breadcrumb_single_link( $link_output, $link ) { $element = 'li'; $element = esc_attr( apply_filters( 'wpseo_breadcrumb_single_link_wrapper', $element ) ); $link_output = ''; if ( isset( $link['url'] ) && ( $i < ( count( $links ) - 1 ) || $paged ) ) { $link_output .= '' . esc_html( $link['text'] ) . ''; } else { if ( isset( $opt['breadcrumbs-boldlast'] ) && $opt['breadcrumbs-boldlast'] ) { $link_output .= '' . esc_html( $link['text'] ) . ''; } else { $link_output .= ''; } } $link_output .= ''; return $link_output; } add_filter( 'wpseo_breadcrumb_output_wrapper', 'ss_breadcrumb_output_wrapper', 10, 1 ); function ss_breadcrumb_output_wrapper( $wrapper ) { $wrapper = 'ol'; return $wrapper; } 

Der nächste Schritt ist, diese Zeile zu ändern:

 return apply_filters( 'wpseo_breadcrumb_output', '' . $output . '' ); 

Ich möchte ein Aria-Element von aria-labelledby="breadcrumblabel" zu dieser Ausgabe hinzufügen. Also habe ich diese function eingerichtet:

 add_filter( 'wpseo_breadcrumb_output', 'ss_breadcrumb_output' ); function ss_breadcrumb_output() { return apply_filters( 'ss_breadcrumb_output', '' . $output . '' ); } 

Problem, das ich habe, ist $wrapper $id $class und $output alle Null zurückgeben. Ich denke, ich weiß, warum sie null sind, obwohl ich als PHP-Anfänger das nicht erklären kann.

Wenn mir jemand in die richtige Richtung zeigen könnte, damit ich das herausfinden kann, würde ich es begrüßen.

Vielen Dank.

Solutions Collecting From Web of "Bearbeiten Yoast SEO Breadcrumbs-Ausgabe"

Sie sind alle null. Sie haben keine dieser Variablen festgelegt. Hier ist deine function.

 function ss_breadcrumb_output() { return apply_filters( 'ss_breadcrumb_output', '< ' . $wrapper . $id . $class . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $output . '' ); } 

Alle Variablen in dieser function sind für diese function isoliert. Variablen außerhalb dieser function funktionieren nicht. Da Sie keine Variablen (in der function) festgelegt haben und sie nicht an die function übergeben werden, sind sie empty . Es ist eine Frage des scopes . Es gibt Möglichkeiten, wie Globalisierung , aber das ist nicht entscheidend für diese Frage, also werde ich Sie auf Ihre eigenen Geräte verlassen.

Aber zu deinem Problem … Schau dir den Filter an, wo er im Plugin angewendet wird .

 return apply_filters( 'wpseo_breadcrumb_output', '< ' . $wrapper . $id . $class . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $output . '' ); 

Ich denke, das könnte sein, wo du falsch liegst. This – '< ' . $wrapper . $id . $class . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $output . '' '< ' . $wrapper . $id . $class . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $output . '' '< ' . $wrapper . $id . $class . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $output . '' – ist alles ein Parameter. Das . ist ein String-Verkettungsoperator, was bedeutet, dass alles zu einer Zeichenkette zusammengeführt wird. Wenn das an den Filter übergeben wird, gibt es keine Variablen mehr. Sie werden als einfache Zeichenfolge an den Filter übergeben.

Ihre function könnte diese Zeichenfolge abfangen und manipulieren, wenn Sie Parameter hinzugefügt haben wie:

 function ss_breadcrumb_output($output) { var_dump($output); // you should see the string referred to above return apply_filters( 'ss_breadcrumb_output', '< ' . $wrapper . $id . $class . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $output . '' ); } 

Ich bin verwirrt über diesen Teil: return apply_filters( 'ss_breadcrumb_output', '< ' . $wrapper . $id . $class . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $output . '' );

Wenn du versuchst, die Breadcrumb-Ausgabe an einen anderen Filter (deiner Erstellung, nehme ich an) zu übergeben, möchtest du:

 function ss_breadcrumb_output($output) { return apply_filters( 'ss_breadcrumb_output', $output ); } 

Aber warum? Alles, was Sie damit tun könnten, könnten Sie mit dem Filter wpseo_breadcrumb_output .

Ich denke du willst nur:

 function ss_breadcrumb_output($output) { $output = preg_replace('/([^>]+)>(.*)/','$1 aria-labelledby="breadcrumblabel" >$2',$output); return $output; } 

Ich sollte auch nicht, dass Regex auf Markup recht heikel ist. Es ist leicht, es falsch zu verstehen. Verwenden Sie mit Vorsicht.

http://wpquestions.com/question/showChrono/id/8603

Ich benutzte die erste function mit str_replace

 add_filter( 'wpseo_breadcrumb_output', 'custom_wpseo_breadcrumb_output' ); function custom_wpseo_breadcrumb_output( $output ){ if( is_page() ){ $from = '...'; // EDIT this to your needs $to = ''; $output = str_replace( $from, $to, $output ); } return $output; }