web-dev-qa-db-fra.com

comment utiliser ajax pour afficher depuis la base de données et en charger plus dans le plugin wordpress

J'ai développé un plugin. Il crée automatiquement les URL de la vidéo dans la base de données.

La table est composée de id, titre, URL, Thurl. Nous pouvons envoyer le contenu à la base de données en utilisant le formulaire du panneau wp-admin (If videos by pk).

Je veux récupérer les lignes de la base de données et les afficher.Tout d'abord, lorsque la page se charge, elle ne devrait afficher que 3 URL et lorsque vous cliquez sur Charger plus, elle devrait en afficher 3 de plus, etc., essentiellement. J'ai besoin de savoir comment implémenter ajax. dans WordPress.

http://demos.codexworld.com/load-more-data-using-jquery-ajax-php-from-database/ Le plugin Wordpress devrait créer quelque chose comme l'URL ci-dessus.

S'il vous plaît aidez-moi à résoudre ce problème.

Vous trouverez ci-dessous le code correspondant.

    <?php
/*
Plugin Name: pkvideos
Plugin URI: http://pavan.com
Author: Pavan 
Version: 1.0
Description: Videos of IndianFolk.
Text Domain: pavan
Requires at least: 3.0
Tested up to: 4.7.3
*/

add_action('admin_menu', 'test_plugin_setup_menu');

function test_plugin_setup_menu(){
        add_menu_page( 'If Videos', 'If Videos by PK', 'manage_options', 'if-videos-by-pk', 'postvideo' );
        add_submenu_page('if-videos-by-pk', 'Edit Videos', 'Edit Videos', 'manage_options', 'if-videos-edit' );
        add_submenu_page('if-videos-by-pk', 'About Me', 'About Me', 'manage_options', 'if-videos-about' );
}

function postvideo(){
        echo "<h1>IndianFolk Videos</h1>";

        ?>
        <form action="" method="post">
 Title :<input type="text" name="title" required><br>
 Video Url: <input type="text" name="url" required><br>
 Thumbnail Url: <input type="text" name="thurl" required><br>
 <input type="submit" value="Submit" name="submit">
</form>


        <?php
        if(isset($_POST['submit'])){ //check if form was submitted
  $title = $_POST['title']; //get input text
  $url = $_POST['url'];
  $thurl = $_POST['thurl'];
  $aData = array(
            'title' => $title,
            'url' => $url,
            'thurl'=> $thurl
            );

  global $wpdb;
  $res = $wpdb->insert('wp_ifvideos', $aData);      
   $siteurll=get_site_url();

} 

}

function create_plugin_database_table() {
 global $wpdb;
 $table_name = $wpdb->prefix . 'ifvideos';
 $sql = "CREATE TABLE $table_name (
 id mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
 title varchar(50) NOT NULL,
 url longtext NOT NULL,
 thurl longtext NOT NULL,
 PRIMARY KEY  (id)
 );";

 require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
 dbDelta( $sql );
}

register_activation_hook( __FILE__, 'create_plugin_database_table' );

/*=//This is used for adding form as the shortcode in pages or posts or widgets
function wp_first_shortcode(){
echo "Hello, This is your another shortcode!";
?>

<form action="" method="post">
 Title :<input type="text" name="title"><br>
 Url: <input type="text" name="url"><br>
 Thumbnail Url: <input type="text" name="thurl"><br>
 <input type="submit" value="Submit" name="submit">
</form>
<?php

if(isset($_POST['submit'])){ //check if form was submitted
  $title = $_POST['title']; //get input text
  $url = $_POST['url'];
  $thurl = $_POST['thurl'];
  $aData = array(
            'title' => $title,
            'url' => $url,
            'thurl'=> $thurl
            );

  global $wpdb;
  $res = $wpdb->insert('wp_ifvideos', $aData);      
   $siteurll=get_site_url();

}  

}//this is used for adding short code 
add_shortcode('first', 'wp_first_shortcode');*/

function videos_info() 
{
    global $wpdb; 

$videos = $wpdb->get_results( "SELECT * FROM wp_ifvideos ORDER BY id DESC" , ARRAY_N);

foreach ( $videos as $video ) {
    //Here $user[1], 1 is the column number.
    echo do_shortcode("[video width='256' height='144' 
 poster='$video[3]' mp4='$video[2]'][/video]");
 echo $video[1]. '<br>';
}
?>

<?php
}
add_shortcode('showinfo','videos_info');


function video_ajax()
{
    ?>

    <?php

}
 add_shortcode('ajaxvideo','video_ajax');
?>

S'il vous plaît aidez-moi à apporter les modifications au code ci-dessous.

$videos = $wpdb->get_results( "SELECT * FROM wp_ifvideos ORDER BY id DESC" , ARRAY_N);

foreach ( $videos as $video ) {
    //Here $user[1], 1 is the column number.
    echo do_shortcode("[video width='256' height='144' 
 poster='$video[3]' mp4='$video[2]'][/video]");
 echo $video[1]. '<br>';
}
?>

<?php
}
add_shortcode('showinfo','videos_info');


function video_ajax()
{
    ?>

    <?php

}
3
Pavan Kalyan

Voici une approche. En utilisant une variable iframe pour la demande AJAX, il peut être beaucoup plus facile d'apprendre et de déboguer votre code AJAX ... essayez ceci:

function videos_info() {
    global $wpdb; 

    // add LIMIT 3 here
    $videos = $wpdb->get_results( "SELECT * FROM wp_ifvideos ORDER BY id DESC LIMIT 3" , ARRAY_N);

    foreach ( $videos as $video ) {
        echo do_shortcode("[video width='256' height='144' poster='$video[3]' mp4='$video[2]'][/video]");
        echo $video[1]. '<br>';
    }

    $ajaxurl = admin_url('admin-ajax.php');
    echo "<iframe style='display:none;' name='loadmorevids' id='loadmorevids' src='javascript:void(0);'></iframe>";
    echo "<script>function loadmorevideos(offset) {
        document.getElementById('loadmorevids').src = '".$ajaxurl."?action=video_ajax&offset='+offset;}</script>";    
    echo "<div id='morevideos-3'><a href='javascript:void(0);' onclick='loadmorevideos(\"3\");'>Load More Videos</a></div>";
}

// For Logged in Users
add_action('wp_ajax_video_ajax', 'video_ajax');
// For Logged Out Users
add_action('wp_ajax_video_ajax', 'video_ajax');

function video_ajax() {

    global $wpdb;    
    $videos = $wpdb->get_results( "SELECT * FROM wp_ifvideos ORDER BY id DESC" , ARRAY_N);

    $offset = $_GET['offset']; $html = '';
    foreach ( $videos as $i => $video ) {
        // limit to 3 videos using offset
        if ( ($i > ($offset-1)) && ($i < ($offset+2)) ) {
            $html .= do_shortcode("[video width='256' height='144' poster='$video[3]' mp4='$video[2]'][/video]");
            $html .= $video[1]. '<br>';
        }
    }

    // append the new load more link
    $html .= '<div id="morevideos-'.($offset+3).'">';
    $html .= '<a href="javascript:void(0);" onclick="loadmorevids('.($offset+3).');">Load More Videos</a></div>';

    // replace any single quotes with escaped ones
    $html = str_replace("'", "\\'", $html);
    // (or alternatively)
    // $html = str_replace("'", "&apos;", $html);

    // replace the previous loadmore link with the loaded videos
    echo "<script>parent.document.getElementById('morevideos-".$offset."').innerHTML = '".$html."';</script>";
    exit;

}
1
majick

Voici le Codex pour faire les appels ajax appropriés https://codex.wordpress.org/AJAX_in_Plugins

C'est très simple d'ajouter de l'action à votre Ajax.

Lire également sur nonce https://codex.wordpress.org/WordPress_Nonces

2
Thamaraiselvam