WordPress

wtyczki – Dodaj niestandardowe przyciski z niestandardowymi akcjami na ekranie Edytuj post w WordPress?

  • 11 grudnia, 2014
  • 3 min read
wtyczki – Dodaj niestandardowe przyciski z niestandardowymi akcjami na ekranie Edytuj post w WordPress?


Tworzę coś dla klienta i mam Klasa którą stworzyłem z Niestandardowy typ postu o nazwie „Kanały Push” a kiedy użytkownik doda nowy post i opublikuje go, może kliknąć jeden z nich dwa przyciski że mam w Niestandardowe pole meta.

Jeden przycisk jest dla ’Subskrybuj’ a drugi za „Anuluj subskrypcję”. korzystam z hak akcji save_post i testowanie, czy $_POST globalny to ma „subskrypcja pushfeed” Lub „pushfeed-anuluj subskrypcję” a potem zrobić to, co muszę zrobić. Jednak z jakiegoś powodu odkryłem, że po kliknięciu subskrypcji na moim komputerze lokalnym skrypt zatrzymuje się, ponieważ mówi, że wykonał 100 kolejnych połączeń itp., A kończy się to mnóstwem zduplikowanych postów bez tytułu.

Jaki byłby najlepszy sposób, aby tego uniknąć i czy istnieje lepszy hak, którego mogę użyć do tych specjalnych akcji niestandardowych, które chcę aktywować, subskrybując kanał (który przechodzi do innej klasy i wykonuje metodę subskrypcji)?

To jest znacznik, który mam dla tych dwóch przycisków, o których wspomniałem, znajduje się w Metaboksie

<input type="submit" class="button-secondary" name="pushfeed-subscribe" id="pushfeed-subscribe" value="Subscribe">
<input type="submit" class="button-secondary" name="pushfeed-unsubscribe" id="pushfeed-unsubscribe" value="Unsubscribe">

Następnie mam to dla haka akcji:

add_action( 'save_post', array( $this, 'pushfeed_save_post_meta' ) );

Prawdziwy hak jest taki:

public function pushfeed_save_post_meta( $post_id ) {

    // Bail if we're doing an auto save
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

    // if our nonce isn't there, or we can't verify it, bail
    if( !isset( $_POST['pushfeed-nonce-field'] ) || !wp_verify_nonce( $_POST['pushfeed-nonce-field'], basename( __FILE__ ) ) ) return;

    // If Subsctiption ID is empty, generate a random long number and save it
    if ( empty( $_POST['pushfeed-subscription-id'] ) ) {

        $random_number = substr(number_format(time() * mt_rand(),0,'',''),0,10);
        $pushfeed_subscription_id = $random_number . $post_id;
        update_post_meta( $post_id, 'pushfeed-subscription-id', $pushfeed_subscription_id );
    }

    ...

    if ( isset( $_POST['pushfeed-subscribe'] ) || isset( $_POST['pushfeed-unsubscribe'] ) ) {

        $subscription_domain = get_post_meta($post_id, 'pushfeed-domain', true);
        $subscription_id = get_post_meta($post_id, 'pushfeed-subscription-id', true);
        $subscription_feed_url = get_post_meta($post_id, 'pushfeed-feed-url', true);
        $subscription_callback_url = $subscription_domain . '/pushfeed/' . $subscription_id;


        $sub = PuSHSubscriber::instance($subscription_domain, $subscription_id, 'PuSHSubscription', new PuSHEnvironment());

        if ( isset( $_POST['pushfeed-subscribe'] ) ) {
            $sub->subscribe($subscription_feed_url, $subscription_callback_url);
        } elseif ( isset( $_POST['pushfeed-unsubscribe'] ) ) {
            $sub->unsubscribe($subscription_feed_url, $subscription_callback_url);
        }

    }

}

Próbuję dowiedzieć się, dlaczego post zapisuje wiele duplikatów bez tytułu.
Ale przede wszystkim chciałbym wiedzieć, czy istnieje lepszy hak akcji, który mogę wywołać dla tych dwóch niestandardowych akcji.

Warto przeczytać!  paginacja - $paged zawsze 0

Aktualizacja :

Cześć wszystkim. Skończyło się na użyciu żądania Ajax przy użyciu wordpress admin-ajax.php po kliknięciu przycisku, a następnie uruchomieniu metody subskrypcji. Gdy to nastąpi, metoda subskrypcji wykona żądanie get, a jeśli zwróci kod 200, metoda zwróci wartość true dla Ajax.


Źródło