web-dev-qa-db-ja.com

投稿が公開されたときにJavaScriptを追加する

私は投稿が公開されたときに私がjavascriptを追加しようとしているので、それは私のユーザーにとってもっと目立つようにしていますが、何を使うべきかわからない。 publish_postとsave_postを試してみましたが、死なないとうまくいきません。コードの末尾に。私は、ワードプレスのコアコードを避けようと懸命に努力しました、そして、私は本当にこの問題のためにそうしたくないです...ここに私のコードがあります:

function run_when_post_published($post_ID){
    echo '<script type="text/javascript">
        alert("essai");
    </script>';
}
add_action('publish_slider', 'run_when_post_published');

ご協力いただきありがとうございます !

3
Matoma16

管理者側でスクリプトをエンキューするには、 admin_enqueue_scripts フックを使用する必要があります。このコールバックでは、渡された$hook引数を使用して、適切なページ(つまり投稿/投稿タイプを編集するページ)にあることを確認します。

必要に応じて、投稿が特定の種類であるかどうかを確認できます(これが投稿、ページ、またはcptの場合のみ)。

最後に、WordPressの内蔵通知システムを借ります。これは?message=1を生成します。値1〜10は通知メッセージを決定します。 (この関係については@ Azizurのanswerをご覧ください)。

この例では、message変数が設定されている場合にのみJavaScriptをエンキューします。

それから私達のスクリプトをエンキューします(私が探している場所は[theme-folder]/js/notice.js(あるいはこれをあなたのプラグインフォルダーを指す))そしてそれを wp_localise_script で「ローカライズ」しますmessageは、グローバルオブジェクトwpsePost(特にwpsePost.message)のプロパティとして私たちのjavascriptファイルで利用可能になるでしょう。

add_action( 'admin_enqueue_scripts', 'wpse50770_add_admin_scripts', 10, 1 );
function wpse50770_add_admin_scripts( $hook ) {
    global $post;

    //Only need to enque script on the post.php page
    //Optional: restirct by post type
    if ( 'post.php' == $hook  && 'post' == $post->post_type && isset($_GET['message']) ) {     
        $message_id = absint( $_GET['message'] );
        wp_enqueue_script(
            'wpse-notice',
            get_template_directory_uri() . '/js/notice.js',
            array('jquery')
        );
        $data = array( 'Message' => $message_id);
        wp_localize_script( 'wpse-notice', 'wpsePost', $data );
    }
}

次にnotice.jsを作成します。

jQuery(document).ready(function($) {  

    if( wpsePost.Message == 6 ){
        alert('Post published');

    }else if( wpsePost.Message == 1 ){
        alert('Post updated');
    }

});
2
Stephen Harris

これはカスタムpost_type 'book'のカスタムメッセージを作成する方法の例です。配列インデックス6 "Book Published"に注意してください。

//add filter to ensure the text Book, or book, is displayed when user updates a book 

function codex_book_updated_messages( $messages ) {
  global $post, $post_ID;

  $messages['book'] = array(
    0 => '', // Unused. Messages start at index 1.
    1 => sprintf( __('Book updated. <a href="%s">View book</a>'), esc_url( get_permalink($post_ID) ) ),
    2 => __('Custom field updated.'),
    3 => __('Custom field deleted.'),
    4 => __('Book updated.'),
    /* translators: %s: date and time of the revision */
    5 => isset($_GET['revision']) ? sprintf( __('Book restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
    6 => sprintf( __('Book published. <a href="%s">View book</a>'), esc_url( get_permalink($post_ID) ) ),
    7 => __('Book saved.'),
    8 => sprintf( __('Book submitted. <a target="_blank" href="%s">Preview book</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
    9 => sprintf( __('Book scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview book</a>'),
      // translators: Publish box date format, see http://php.net/date
      date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
    10 => sprintf( __('Book draft updated. <a target="_blank" href="%s">Preview book</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
  );

  return $messages;
}
add_filter( 'post_updated_messages', 'codex_book_updated_messages' );

あなたはあなたのJavaScriptメッセージをエコーするために同じフックを使うことができるかもしれません、しかし私はそれをすることをお勧めしません。

0
Azizur Rahman