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

时间:2014-12-11 10:45:06

标签: php wordpress-plugin wordpress

我正在为客户创建一些内容,并且我使用自定义帖子类型创建的,名为' PuSH Feeds' 用户添加新帖并发布,然后点击自定义元框中的两个按钮之一。

一个按钮用于'订阅' ,另一个按钮用于'取消订阅' 。我正在使用 save_post操作挂钩并测试 $ _ POST 全局是否具有' pushfeed-subscribe' ' pushfeed-unsubscribe' ,然后做我需要做的事情。但是出于某种原因,我发现一旦我点击我的本地机器上的订阅就会停止脚本,因为它说它连续100次调用等等,最后我发现了大量没有标题的重复帖子。

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

这是我提到的那两个按钮在Metabox中的标记

<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.php来使用Ajax请求。一旦完成,订阅方法将执行get请求,如果返回200代码,则该方法返回true到Ajax。

1 个答案:

答案 0 :(得分:0)

问题可能是您使用提交按钮造成的。

自定义元框不包含提交按钮。我们的想法是,它们包含单击标准&#34;更新&#34;时提交的表单字段。按钮。然后,您可以保存save_post操作挂钩中提交的内容。

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

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

相关问题