在WordPress的“编辑帖子”屏幕中添加具有自定义操作的自定义按钮


Add custom buttons with custom actions in Edit Post screen in WordPress?

我正在为客户创建一些东西,我有一个类,我用一个名为"PuSH Feeds"的自定义帖子类型创建了该,当用户添加新帖子并发布它时,他们可以单击我在自定义元框中的两个按钮之一。

一个按钮用于"订阅

">,另一个按钮用于"取消订阅"。我正在使用save_post动作钩子并测试_POST美元的全局是否具有"推送订阅">"推送订阅-取消订阅">,然后执行我需要做的事情。但是,由于某种原因,我发现一旦我单击本地计算机上的订阅,脚本就会停止,因为它说它连续调用了 100 次等,我最终会得到大量没有标题的重复帖子。

避免这种情况的最佳方法是什么,是否有更好的钩子可用于我想要激活订阅提要(进入另一个类并执行订阅方法(的这些特殊自定义操作?

这是我在元框中提到的这两个按钮的标记

<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">

然后我有这个动作钩子:

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

实际的钩子是这样的:

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);
        }
    }
}

我试图找出为什么该帖子保存多个没有标题的重复项。但最重要的是,我想知道是否有更好的动作钩子可以调用这两个自定义动作。

更新:

大家好。我最终使用wordpress admin-ajax使用Ajax请求.php单击按钮然后触发订阅方法。完成此操作后,订阅方法将执行 get 请求,如果返回 200 代码,则该方法返回 true 到 Ajax。

该问题可能是由您使用提交按钮引起的。

自定义元框不打算包含提交按钮。这个想法是,它们包含当您单击标准的"更新"按钮时提交的表单字段。然后,您可以在save_post操作挂钩中保存提交的内容。

使用"更新"以外的提交可能会混淆WordPress并导致您的问题。

我建议您更改自定义元框,以具有"订阅"复选框或"订阅/取消订阅"单选按钮,您可以在操作钩子中查看。