私はash_newsletter
という手巻きのカスタム投稿タイプを持っています。この投稿タイプのpost.php?post={$post->ID}&action=edit
管理ページにボタンを追加したいです。ボタンは投稿が公開された後にのみ表示されます。ボタンは一度だけクリック可能になります。ボタンは "Publish"メタボックスにあります。
私の考えでは、ボタンがクリックされると、スクリプトが現在の投稿ステータスをチェックし、post_meta、ash_already_ran == falseをチェックします。両方の条件が満たされると、別のサービスに連絡する関数が呼び出されます。関数がtrueを返すと、 'ash_already_ran'はtrueに更新されます。
これであなたは始めるでしょう。
add_action( 'post_submitbox_misc_actions', 'custom_button' );
function custom_button(){
$html = '<div id="major-publishing-actions" style="overflow:hidden">';
$html .= '<div id="publishing-action">';
$html .= '<input type="submit" accesskey="p" tabindex="5" value="Customize Me!" class="button-primary" id="custom" name="publish">';
$html .= '</div>';
$html .= '</div>';
echo $html;
}
Publish Meta Boxにカスタムボタンを追加します。
これまでのところまだあなたがする必要があります。
私は今行く必要がありますが、上記の点に取り組み、あなたの結果を投稿しようとしないでください。明日私はあなたが現在どこにいるのか、そして他の誰かがさらに手助けできるかどうかを見るために戻ってきます。
ヘッドスタートをありがとう userabuser
。拡張されたコードは次のようになります。
add_action( 'post_submitbox_misc_actions', 'custom_button', 10, 1 );
function custom_button( $post ) {
// Show only for published pages.
if ( ! $post
|| 'publish' !== $post->post_status
|| 'page' !== $post->post_type ) {
return;
}
$html = '<div id="major-publishing-actions" style="overflow:hidden">';
$html .= '<div id="publishing-action">';
$html .= '<input type="submit" accesskey="p" tabindex="5" value="Custom Button" class="button-primary" id="submitbox-custom-button" name="publish">';
// Post meta example.
$user = get_user_by( 'ID', get_post_meta( $post->ID, '_edit_last', true ) );
if ( $user ) {
$html .= '<div>' . ucfirst( $post->post_type ) . ' ' . $post->ID . ' last edited by ' . $user->display_name . '</div>';
}
$html .= '</div>';
$html .= '</div>';
// Customize button click event.
$html .= "<script>window.addEventListener('load', function(){ jQuery('input#submitbox-custom-button').click(function(event){ event.preventDefault(); alert('You\'re editing " . $post->post_type . " " . $post->ID . "'); return true; }); }); </script>";
echo $html;
}
今日の5年以上前の問題を解決する必要がないようにサービス層をするいくつかの方法があります。しかし、これは将来的には誰にとっても良いコピー/ペーストの開始となるはずであり、そのまま使用できます。
あなたのJSを別々にロードされたファイルに含めるほうが明らかに良いですが、もう少し読みやすいJSをハックしたいのなら、 ob_start
と ob_get_clean
を使うことができます。
ob_start(); ?>
<script>window.addEventListener('load', function() {
jQuery('input#submitbox-custom-button').click(function(event) {
event.preventDefault();
alert('You\'re editing <?php echo $post->post_type . " " . $post->ID; ?>');
return true;
});
});
</script>
<?php $html .= ob_get_clean();
post_submitbox_misc_actions
フックを使用するのが適切な方法ですが、前の回答で示唆したようにDOM IDを2回使用するべきではありません。したがって、HTML出力は次のようになります。
add_action( 'post_submitbox_misc_actions', function( $post ){
// check something using the $post object
if ( get_post_status( $post->ID ) === 'publish' ){
echo '<div class="misc-pub-section">Some button...</div>';
}
});
参照してください: https://developer.wordpress.org/reference/functions/post_submit_meta_box/