![](/img/trans.png)
[英]Wordpress Add dropdown in custom post type add/edit post in admin
[英]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.