wake-up-neo.net

Hinzufügen eines Klon-Links zu Produktattributen - post_row_actions () -Filter oder Überschreiben einer Klassenfrage

Ich möchte ein Produktattribut in WooCommerce duplizieren können. Denken Sie daran, ein Produkt (mit bereits vorhandenen Funktionen) oder Plugins zu duplizieren, mit denen Sie einen Beitrag duplizieren können.

Ich denke jedoch, dass dies im Allgemeinen mit WP zusammenhängt, da ich herausfinden möchte, wie ein "Klon" -Link zu den Links "Bearbeiten" und "Löschen" für jedes WooCommerce-Produktattribut in hinzugefügt werden kann Die Admin-Seite Produkte> Attribute.

Ich habe mehrere Artikel über die Verwendung des Filters post_row_actions gesehen.

Ich kann einen "Clone" -Link zu Produkten hinzufügen (ich verwende "Clone", da WC bereits einen "Duplicate" -Link für Produkte bereitstellt), indem ich diesen Filter verwende.

// Add "Clone" link to each row in the Woo Attributes admin page
function my_duplicate_post_link($actions, $post)
{
    if ($post->post_type=='product' )
    {
     $actions['duplicate'] = '<a href="#" title="" rel="permalink">Clone</a>';
}
return $actions;
}
add_filter('post_row_actions', 'my_duplicate_post_link', 10, 2);

Ich habe dann dem post_type-Test ein weiteres Argument hinzugefügt:

if ($post->post_type=='product' && $post->page=='product_attributes')

Offensichtlich (für mich jetzt) ​​hat dies nicht nur den "Klon" -Link für Attribute bereitgestellt, sondern den Link aus dem Bereich für Schnelllinks für jedes Produkt auf der Produktlistenseite entfernt. Dies bedeutet, dass post_row_actions nur auf der obersten Ebene von post_type funktioniert. Wie in, negiert page als Post-Request den post_row_actions-Filter.

Der HTML-Code für die Seite mit den Produktattributen wird mit dem /woocommerce/includes/admin/class-wc-admin-attributes.phpfile generiert. Woo ist natürlich berühmt für seine Fähigkeit, mit Haken und Handlungen umzugehen. Deshalb dachte ich: "Kein Problem."

Ich kann jedoch keine Informationen darüber finden, wie untergeordnete Designversionen dieser Woo-Administrationsskripts erstellt werden. Alles andere, scheint es, aber nicht die. Ich habe eine Kopie dieser Datei in mehrere untergeordnete Themenordner abgelegt, beginnend mit dem Stammverzeichnis bis hinunter zu einem Replikat der Woo-Ordnerstruktur. Kein Glück.

Erweitern Sie als Nächstes die Klasse WC_Admin_Attributes und schreiben Sie meine eigene Funktion. Dann habe ich so etwas:

class Cloneable_WC-Admin_attributes extends WC-Admin_Attributes {

Und ich kopiere die gesamte Funktion public static function edit_attribute() in diese und füge den Link "Clone" in den Teil des Codes ein, der die Links "Edit" und "Delete" generiert.

Das geht auch nicht. Ich vermute, weil alle Funktionen in der übergeordneten Klasse von self:: aufgerufen werden.

Mein letzter Ausweg besteht darin, jQuery zu verwenden, um das innerHTML der Klasse row-actions des enthaltenen DIV zu bearbeiten und den Link "Clone" hinzuzufügen. Das ist aber so ein Hack.

Es ist kein Problem, PHP auszuführen, um das Attribut zu duplizieren. Ich kann gerade nicht herausfinden, wie man einen Link an erster Stelle hinzufügt!

 enter image description here 

1
Terry Hale

WooCommerce hat nicht vorweggenommen, dass an dieser Stelle eine neue Aktion hinzugefügt werden muss. Daher gibt es weder Filter noch Aktionen, um dies zu tun

es gibt 2 andere Lösungen:

  • hinzufügen des Links mit JavaScript
  • analysieren des HTML-Ergebnisses, um den Link an dieser Stelle hinzuzufügen

.

Um den Link in den HTML-Code einzufügen, können Sie dies versuchen

add_action("admin_menu", function () {

    $menu_slug = "edit.php?post_type=product";
    $submenu_slug = "product_attributes";

    $hookname = get_plugin_page_hookname($submenu_slug, $menu_slug);


    // removing the original page call
    remove_all_actions($hookname);

    // adding the hook for the new page
    add_action($hookname, "display_newPage_product_attributes");

});


function display_newPage_product_attributes() {

    // original page

    $wc_Admin_Menus = new WC_Admin_Menus();

    ob_start();
    $wc_Admin_Menus->attributes_page();
    $content = ob_get_clean();


    // adding the links, to improve

    $link = "<a href=\"a\">Attack of the Clone</a>";

    $content = str_replace(
        "</a></span></div>"
        , "</a></span> | $link</div>"
        , $content
    );


    // display

    echo $content;

}

Ich schreibe "zur Verbesserung" in einen Kommentar, da Sie sicherlich jeden Link personalisieren müssen und vielleicht über einen Ersatz nachdenken können, der auch dann funktioniert, wenn die zukünftige Version von WooCommerce Änderungen auf dieser Seite vornimmt

0
mmm