So fügen Sie Javascript korrekt in functions.php hinzu


10

Ich möchte einige hässlich aussehende Pfeile entfernen, die bei Warenkorbschaltflächen in WooCommerce Standard sind. Um dies zu erreichen, habe ich einen Tipp zum Hinzufügen des folgenden Codes gefunden, der die Pfeile entfernen sollte, wenn das Dokument geladen wurde.

Ich gehe davon aus, dass ich es in meine functions.php einfügen werde. Wie genau würde ich das machen?

$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});

BEARBEITEN

In Ordnung. Ich habe diesen Ansatz ausprobiert:

Erstellte eine Datei mit dem Namen 'removeArrows.js' und legte sie in meinem Plugin-Ordner ab. Dies hat den gleichen Inhalt wie der ursprüngliche Code, außer jQuery statt $. Dann habe ich Folgendes zu functions.php hinzugefügt:

function wpb_adding_scripts() {
      wp_register_script('my_amazing_script', plugins_url('removeArrows.js', FILE), array('jquery'),'1.1', true);
     wp_enqueue_script('my_amazing_script');
 } 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts' ); 

Ich kann nicht herausfinden, wie der Code richtig angezeigt wird. Das hat nicht funktioniert. Irgendwelche Vorschläge, damit dies funktioniert?

jQuery-Snippet-Quelle


Das ist verrückt: Können Sie die Pfeile im Code, der sie generiert, nicht bearbeiten? (Oder wird es von einer externen Quelle heruntergeladen?) In jedem Fall können Sie beide Ersetzungen in einer einzigen Funktion durchführen, um zu vermeiden, dass der gesamte HTML-Code im Warenkorbblock zweimal gelesen und geschrieben wird. Ich kenne keine Möglichkeit, das direkt aus der Datei functions.php in die Seite einzufügen, aber Sie können es in einer separaten Skriptdatei speichern (falls Sie noch keine haben, können Sie es hinzufügen) und dann wp-enqueue-script. Sie müssen auch das $s ändern in jQuery(siehe diese Seite Abschnitt 7)
Rup

Nein, ich bin mir ziemlich sicher, dass es vor dem Einfügen nicht entfernt werden kann. Wenn es geht, habe ich keinen Weg gefunden, es zu tun. Guter Punkt, um es in einer einzigen Funktion hinzuzufügen. Würde es so aussehen? $ (document) .ready (function () {$ (". woocommerce-cart"). html (function (i, val) {return val.replace ("→", ""); return val.replace ("← "," ");});}); Ich werde in das Enqueue-Skript schauen. Scheint allerdings etwas kompliziert zu sein. Danke!
user2806026

In Ordnung. Ich habe diesen Ansatz ausprobiert. Erstellte eine Datei mit dem Namen 'removeArrows.js' und legte sie in meinem Plugin-Ordner ab. Dies hat den gleichen Inhalt wie der ursprüngliche Code, außer jQuery statt $. dann habe ich Folgendes zu functions.php hinzugefügt; `function wpb_adding_scripts () {wp_register_script ('my_amazing_script', plugins_url ('removeArrows.js', FILE ), array ('jquery'), '1.1', true); wp_enqueue_script ('my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts'); (Entschuldigung, ich kann nicht herausfinden, wie der Code richtig angezeigt wird.) Dies hat nicht funktioniert. Können Sie mir helfen, das Problem zu beheben?
user2806026

1
Bitte reichen Sie eine Bearbeitung ein und fügen Sie alle relevanten Informationen direkt zu Ihrer Frage hinzu. Verwenden Sie nicht den Kommentarbereich, um Code hinzuzufügen
Pieter Goosen

Antworten:


10

Ihre $scrin Ihrer wp_register_script()Funktion ist falsch. Da sich Ihre functions.php in Ihrem Plugin befindet und sich Ihre removeArrows.js im Stammverzeichnis Ihres Plugins befindet, $scrsollten Sie so aussehen

plugins_url( '/removeArrows.js' , __FILE__ )

Ein weiterer wichtiger Punkt ist, dass es immer empfehlenswert ist, Ihre Skripte und Stile zuletzt zu laden. Dadurch wird sichergestellt, dass es nicht von anderen Skripten und Stilen überschrieben wird. Fügen Sie dazu einfach Ihrem Prioritätsparameter ( $priority) von eine sehr niedrige Priorität (sehr hohe Zahl) hinzu add_action.

 add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

Und immer Last / enqueue Skripte und Stile über die wp_enqueue_scriptsAktion Haken, da dies der richtige Haken verwendet wird. Laden Sie keine Skripte und Stile direkt in wp_headoderwp_footer

BEARBEITEN

Wenn Sie für Themen angegeben haben, dass Sie jetzt alles in Ihr Thema verschoben haben, wird $scrdies geändert

 get_template_directory_uri() . '/removeArrows.js'

für übergeordnete Themen und dies

get_stylesheet_directory_uri() . '/removeArrows.js'

für untergeordnete Themen. Ihr vollständiger Code sollte so aussehen

function wpb_adding_scripts() {
    wp_register_script('my_amazing_script', get_template_directory_uri() . '/removeArrows.js', array('jquery'),'1.1', true);
    wp_enqueue_script('my_amazing_script');
} 

add_action( 'wp_enqueue_scripts', 'wpb_adding_scripts', 999 ); 

Vielen Dank für Ihren tollen Rat. Dies scheint der zu verwendende Ansatz zu sein. Eine Frage allerdings; Die Datei functions.php befindet sich in meinem Themenordner. Wie würde ich die js-Datei verknüpfen, wenn sie sich nur im selben Themen-Stammordner befindet?
user2806026

Sie sollten alles in einem Plugin oder in einem Thema behalten, nicht teilen. Wenn Sie in einem Thema sind, $scrwäre Ihr get_template_directory_uri() . '/removeArrows.js'für übergeordnete Themen und get_templatestylesheet_directory_uri() . '/removeArrows.js'für Kinderthemen
Pieter Goosen

Es wurde erneut versucht, diesmal die Datei removeArrows.js direkt im Themenordner hinzuzufügen und Folgendes in functions.php zu verwenden. Funktion wpb_adding_scripts () {wp_register_script ('my_amazing_script', get_template_directory_uri (). '/removeArrows.js', FILE ), array ('jquery'), '1.1', true); wp_enqueue_script ('my_amazing_script'); } add_action ('wp_enqueue_scripts', 'wpb_adding_scripts', 999); Dies gibt mir Analysefehler: Syntaxfehler, unerwartetes ',' in der Zeile wp_register_script.
user2806026

get_template_directory_uri() . '/removeArrows.js', FILE)sollte nur seinget_template_directory_uri() . '/removeArrows.js'
Pieter Goosen

Nee. Verwenden Sie Ihren vollständig bearbeiteten Code am Ende Ihres ursprünglichen Beitrags. Das einzige, was es tut, ist, die Warenkorbseite beim Anzeigen des Inhalts einzufrieren. Ich denke, ich werde einfach aufgeben :-) Ein letzter Ausweg; Sie haben zunächst erwähnt, dass get_template_directory_uri () für übergeordnete Themen und im endgültigen vollständigen Code für untergeordnete Themen gilt. Welches ist es? Mein Thema ist ein Elternteil :-)
user2806026

4

Ich würde keine weitere externe js-Datei hinzufügen, es ist nur eine zusätzliche und unnötige Ressource zum Abrufen, und das ist etwas, das wir in Bezug auf die Ladezeiten von Seiten reduzieren möchten.

Ich würde dieses jQuery-Snippet mit dem wp_headHook in den Kopf Ihrer Website einfügen. Sie würden Folgendes in Ihre Theme- oder Plugins-Funktionsdatei einfügen. Ich habe auch sichergestellt, dass sich jQuery im konfliktfreien Modus befindet, wie Sie unten sehen können.

add_action('wp_head','woocommerce_js');

function woocommerce_js()
{ // break out of php ?>

jQuery(document).ready(function($) {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
<?php } // break back into php

Nachdem Sie dies getan und Ihre Seite aktualisiert haben, überprüfen Sie die Seitenquelle, um sicherzustellen, dass dieses jQuery-Snippet tatsächlich in Ihre Seite geladen wird. Wenn dies der Fall ist, sollte es funktionieren, es sei denn, das tatsächliche jQuery-Snippet, das Sie verwenden, ist fehlerhaft.


Dies ist jedoch nicht die WordPress-Methode zum Laden von Javascript. Siehe wp_enqueue_script()für weitere Informationen.
Pat J

2
Hallo @PatJ, ich stimme zu, wenn Sie eine externe JS-Bibliothek oder JS-Datei mit all Ihren Javascript-Funktionen laden, dann wäre das absolut der richtige Weg. Wenn Sie jedoch ein Javascript-Snippet laden, ist es nicht sinnvoll, eine ganz neue JS-Datei zu erstellen und nur dafür eine zusätzliche HTTP-Anforderung hinzuzufügen. Nehmen wir zum Beispiel Google Analytics. In 99% der Designs oder benutzerdefinierten Builds wird der JS über Themenoptionen oder Funktionsdateien in die Kopf- oder Fußzeile eingefügt. Es ist üblich, JS- oder sogar CSS-Snippets auf diese Weise einzuschließen.
Matt Royal

1
"Common Practice" macht es jedoch nicht richtig. In den wp_enqueue_script()Dokumenten wird sogar angegeben. Dies ist die empfohlene Methode zum Verknüpfen von JavaScript mit einer von WordPress generierten Seite .
Pat J

Wenn Sie das Standardthema 24 von WordPress verwenden, wird html5.js in die Datei header.php geladen. Zugegeben, dies wird aus einem Grund getan, um zu überprüfen, ob der Browser die Bedingung erfüllt, IE <9 zu sein. Mein Punkt ist jedoch, dass das Einreihen verständlicherweise die empfohlene und bevorzugte Methode ist, jedoch abhängig von allen anderen Variablen / Umständen, die Sie umgeben versuchen, es zu erreichen, ist möglicherweise nicht immer das praktischste und ich denke, dass ein gewisses Maß an Diskretion angewendet werden sollte. Schau, ich könnte mich auch in dieser Ansicht völlig irren, ich bin interessiert zu hören, was einige der wirklich erfahrenen Jungs zu sagen haben :-)
Matt Royal

Vielen Dank für Ihren tollen Vorschlag. Ich kann es aber nicht zum Laufen bringen; Wenn ich Ihren Code in das <? php-Tag meiner functions.php einfüge, wird in /somepath.../functions.php in Zeile 1146 ein 'Analysefehler: Syntaxfehler, unerwartet' <'angezeigt. Wenn ich es außerhalb des <? Php hinzufüge, scheint es einfach den angegebenen Code oben auf der Seite wiederzugeben. Was fehlt mir hier?
user2806026

0

Da die Antwort bereits akzeptiert wird, möchte ich nur sagen, dass es eine andere Möglichkeit gibt, Javascript-Code in der Fußzeile in die Warteschlange zu stellen, was ich schon oft getan habe.

in der Datei functions.php:

function load_script_to_remove_arrow(){
?>
<script>
$(document).ready(function() {
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace(" →", "");
    });
    $(".woocommerce-cart").html(function(i, val) {
    return val.replace("← ", "");
    });
});
</script>
<?php
}
add_action( 'wp_footer', 'load_script_to_remove_arrow' );

Sie können dieses Skript nur unter Verwendung der Bedingung in eine bestimmte Seitenvorlage laden

if( is_page_template( 'page-template.php' ) ):

//put above code (or just add_action part) inside this condition to load file only if the condition is true 

endif;

Wenn sich die Seite-template.php im Verzeichnis befindet (z. B. im Vorlagenverzeichnis im Stammverzeichnis Ihres Themas), können Sie wie folgt schreiben:

is_page_template( 'templates/page-template.php' );

Ich würde nicht empfehlen, das JavaScript so in die Fußzeile zu "backen". Es verhindert, dass es nicht gehängt oder geändert werden kann (zumindest leicht), was für die Plugin- und Theme-Entwicklung äußerst wichtig ist. Wenn Sie der Endbenutzer einer Website sind und ein schnelles Skript oder ähnliches benötigen, entscheiden Sie sich dafür - aber es wp_enqueue_script()ist fast immer universell besser und flexibler.
Xhynk

-1

Um die Frage zu beantworten, müssen wir zuerst zwischen Javascript und JQuery unterscheiden.

Um es auf einfache Weise auszudrücken:

  • Javascript basiert auf ECMAScript
  • JQuery ist eine Bibliothek für Javascript

In Wirklichkeit stellen Sie also zwei verschiedene Fragen:

  • Ihr Titel spricht von einer Lösung für die Implementierung von Javascript
  • Ihre Frage spricht von einer Lösung für die Implementierung von JQuery

Da die Google-Ergebnisse Ihren Titel anzeigen und der gesamte Inhalt der Seite über JQuery spricht, kann dies für Personen, die nach einer Javascript-Lösung suchen, sehr frustrierend sein.

Und jetzt zur JQuery-Lösung:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array ( 'jquery' ), 1.1, true);

Und die Javascript-Lösung:

wp_enqueue_script( 'script-id', get_template_directory_uri() . '/js/script.js', array(), '1.0.0', true );

Dieser Code kann zu Ihrer functions.php hinzugefügt werden. In beiden Fällen befindet sich der Speicherort der Skripte wp-content/themes/theme-name/js/script.js

Viel Spaß beim Codieren!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.