繁体   English   中英

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

[英]Add custom buttons with custom actions in Edit Post screen in WordPress?

我正在为客户创建一些东西,我有一个用自定义帖子类型创建的称为“ PuSH Feed” ,当用户添加新帖子并发布时,他们可以单击我在其中的两个按钮之一自定义元框

一个按钮用于“ Subscribe” ,另一个按钮用于“ Unsubscribe” 我正在使用save_post操作钩子,并测试$ _POST全局变量是否具有“ pushfeed-subscribe”“ pushfeed-unsubscribe” ,然后执行我需要做的事情。 但是由于某种原因,我发现,一旦我在本地计算机上单击订阅,就会停止脚本,因为该脚本说它进行了100次连续调用等,最终导致出现很多没有标题的重复帖子。

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

这是我提到的两个按钮的标记,位于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。

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

自定义元框不旨在包括提交按钮。 想法是它们包含单击标准的“​​更新”按钮时提交的表单字段。 然后您可以将提交的内容保存在save_post操作挂钩中。

使用除“更新”以外的其他提交可能会使WordPress混乱并导致您的问题。

建议您将“自定义元框”更改为具有“订阅”复选框或“订阅/取消订阅”单选按钮,您可以在操作挂钩中查看它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM