it-swarm.com.de

Bearbeiten Sie die Ausgabe von Yoast SEO-Breadcrumbs

Ich möchte die Ausgabe von Yoast SEO Breadcrumbs anpassen.

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 = '<' . $element . ' typeof="v:Breadcrumb">';
    if ( isset( $link['url'] ) && ( $i < ( count( $links ) - 1 ) || $paged ) ) {
        $link_output .= '<a href="' . esc_url( $link['url'] ) . '" rel="v:url" property="v:title">' . esc_html( $link['text'] ) . '</a>';
    } else {
        if ( isset( $opt['breadcrumbs-boldlast'] ) && $opt['breadcrumbs-boldlast'] ) {
            $link_output .= '<strong class="breadcrumb_last" property="v:title">' . esc_html( $link['text'] ) . '</strong>';
        } else {
            $link_output .= '<li class="breadcrumb_last" property="v:title">' . esc_html( $link['text'] ) . '</li>';
        }
    }
    $link_output .= '</' . $element . '>';
    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 besteht darin, diese Zeile zu ändern:

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

Ich möchte dieser Ausgabe ein Arienelement von aria-labelledby="breadcrumblabel" hinzufügen. Also richte ich diese Funktion ein:

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

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

Wenn jemand mich in die richtige Richtung lenken könnte, damit ich das herausfinden kann, wäre ich dankbar.

Vielen Dank.

1
showFocus

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

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

Alle Variablen in dieser Funktion sind für diese Funktion isoliert. Außerhalb dieser Funktion gesetzte Variablen funktionieren nicht. Da Sie (in der Funktion) keine Variablen festgelegt haben und diese nicht an die Funktion übergeben werden, sind sie empty . Es ist eine Frage des Umfangs . Es gibt Wege, um das zu umgehen, wie die Globalisierung , aber das ist für diese Frage nicht kritisch, also überlasse ich Sie Ihren eigenen Geräten.

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 . '</' . $wrapper . '>' );

Ich denke, das könnte der Grund sein, warum du falsch liegst. Dieser --'<' . $wrapper . $id . $class . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $output . '</' . $wrapper . '>'-- ist alles ein Parameter. Dieser . ist ein Operator für die Verkettung von Zeichenfolgen, was bedeutet, dass alles zu einer Zeichenfolge 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 Funktion könnte diesen String abfangen und manipulieren, wenn Sie Parameter wie folgt hinzufügen:

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 . '</' . $wrapper . '>' );
}

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

Wenn Sie versuchen, die Breadcrumb-Ausgabe an einen anderen Filter (Ihrer Erstellung, nehme ich an) weiterzuleiten, möchten Sie:

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

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

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 ziemlich heikel ist. Es ist leicht, etwas falsch zu machen. Mit Vorsicht verwenden.

1
s_ha_dum

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

Ich habe die erste Funktion mit str_replace benutzt

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