Wednesday, 1 November 2017

How to Duplicate Posts and Pages Without Plugins

How to Duplicate Posts and Pages Without Plugins

It is very useful when you work with a lot of similar posts. So, when you copy a post, you don’t have to enter all metadata, taxonomies etc. each time manually.

Duplicating posts is a very useful functionality when you work with a lot of similar posts (for example products in online shop). Especially if the posts have the same custom fields values, but the different post title and content.
It means that you do not have to re-enter custom fields, post tags and categories each time.
This is the example:

When you click the «Duplicate» link, the post will be cloned, but it won't be published, it will be saved as a draft and you will be redirected to the post edit admin page.
This is enough easy to do, so, look at the following code, insert it into your theme functions.php file (or into the another file if you know what to do).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
 * Function creates post duplicate as a draft and redirects then to the edit post screen
 */
function rd_duplicate_post_as_draft(){
 global $wpdb;
 if (! ( isset( $_GET['post']) || isset( $_POST['post'])  || ( isset($_REQUEST['action']) && 'rd_duplicate_post_as_draft' == $_REQUEST['action'] ) ) ) {
  wp_die('No post to duplicate has been supplied!');
 }
 
 /*
  * Nonce verification
  */
 if ( !isset( $_GET['duplicate_nonce'] ) || !wp_verify_nonce( $_GET['duplicate_nonce'], basename( __FILE__ ) ) )
  return;
 
 /*
  * get the original post id
  */
 $post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
 /*
  * and all the original post data then
  */
 $post = get_post( $post_id );
 
 /*
  * if you don't want current user to be the new post author,
  * then change next couple of lines to this: $new_post_author = $post->post_author;
  */
 $current_user = wp_get_current_user();
 $new_post_author = $current_user->ID;
 
 /*
  * if post data exists, create the post duplicate
  */
 if (isset( $post ) && $post != null) {
 
  /*
   * new post data array
   */
  $args = array(
   'comment_status' => $post->comment_status,
   'ping_status'    => $post->ping_status,
   'post_author'    => $new_post_author,
   'post_content'   => $post->post_content,
   'post_excerpt'   => $post->post_excerpt,
   'post_name'      => $post->post_name,
   'post_parent'    => $post->post_parent,
   'post_password'  => $post->post_password,
   'post_status'    => 'draft',
   'post_title'     => $post->post_title,
   'post_type'      => $post->post_type,
   'to_ping'        => $post->to_ping,
   'menu_order'     => $post->menu_order
  );
 
  /*
   * insert the post by wp_insert_post() function
   */
  $new_post_id = wp_insert_post( $args );
 
  /*
   * get all current post terms ad set them to the new post draft
   */
  $taxonomies = get_object_taxonomies($post->post_type); // returns array of taxonomy names for post type, ex array("category", "post_tag");
  foreach ($taxonomies as $taxonomy) {
   $post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
   wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
  }
 
  /*
   * duplicate all post meta just in two SQL queries
   */
  $post_meta_infos = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->postmeta WHERE post_id=$post_id");
  if (count($post_meta_infos)!=0) {
   $sql_query = "INSERT INTO $wpdb->postmeta (post_id, meta_key, meta_value) ";
   foreach ($post_meta_infos as $meta_info) {
    $meta_key = $meta_info->meta_key;
    if( $meta_key == '_wp_old_slug' ) continue;
    $meta_value = addslashes($meta_info->meta_value);
    $sql_query_sel[]= "SELECT $new_post_id, '$meta_key', '$meta_value'";
   }
   $sql_query.= implode(" UNION ALL ", $sql_query_sel);
   $wpdb->query($sql_query);
  }
 
 
  /*
   * finally, redirect to the edit post screen for the new draft
   */
  wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
  exit;
 } else {
  wp_die('Post creation failed, could not find original post: ' . $post_id);
 }
}
add_action( 'admin_action_rd_duplicate_post_as_draft', 'rd_duplicate_post_as_draft' );
 
/*
 * Add the duplicate link to action list for post_row_actions
 */
function rd_duplicate_post_link( $actions, $post ) {
 if (current_user_can('edit_posts')) {
  $actions['duplicate'] = '<a href="' . wp_nonce_url('admin.php?action=rd_duplicate_post_as_draft&post=' . $post->ID, basename(__FILE__), 'duplicate_nonce' ) . '" title="Duplicate this item" rel="permalink">Duplicate</a>';
 }
 return $actions;
}
 
add_filter( 'post_row_actions', 'rd_duplicate_post_link', 10, 2 );
But what if this code works only for posts, not for pages or any registered post types? Do not worry, all we need to do is to change the last filter to this:
add_filter('page_row_actions', 'rd_duplicate_post_link', 10, 2);

Monday, 9 October 2017

AngularJS Tutorial with PHP - Insert Data into Mysql Database


Source Code

Database


 --  
 -- Table structure for table `tbl_user`  
 --  
 CREATE TABLE IF NOT EXISTS `tbl_user` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,  
  `first_name` varchar(200) NOT NULL,  
  `last_name` varchar(200) NOT NULL,  
  PRIMARY KEY (`id`)  
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;  
 --  
 -- Dumping data for table `tbl_user`  
 --  
 INSERT INTO `tbl_user` (`id`, `first_name`, `last_name`) VALUES  
 (18, 'Mark', 'John');  


index.php


 <!DOCTYPE html>  
 <!-- index.php !-->  
 <html>  
      <head>  
           <title>Webslesson Tutorial | AngularJS Tutorial with PHP - Insert Data into Mysql Database</title>  
           <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />  
           <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>  
      </head>  
      <body>  
           <br /><br />  
           <div class="container" style="width:500px;">  
                <h3 align="center">AngularJS Tutorial with PHP - Insert Data into Mysql Database</h3>  
                <div ng-app="myapp" ng-controller="usercontroller">  
                     <label>First Name</label>  
                     <input type="text" name="first_name" ng-model="firstname" class="form-control" />  
                     <br />  
                     <label>Last Name</label>  
                     <input type="text" name="last_name" ng-model="lastname" class="form-control" />  
                     <br />  
                     <input type="submit" name="btnInsert" class="btn btn-info" ng-click="insertData()" value="ADD"/>  
                </div>  
           </div>  
      </body>  
 </html>  
 <script>  
 var app = angular.module("myapp",[]);  
 app.controller("usercontroller", function($scope, $http){  
      $scope.insertData = function(){  
           $http.post(  
                "insert.php",  
                {'firstname':$scope.firstname, 'lastname':$scope.lastname}  
           ).success(function(data){  
                alert(data);  
                $scope.firstname = null;  
                $scope.lastname = null;  
           });  
      }  
 });  
 </script>  

insert.php


 <?php  
 //insert.php  
 $connect = mysqli_connect("localhost", "root", "", "testing");  
 $data = json_decode(file_get_contents("php://input"));  
 if(count($data) > 0)  
 {  
      $first_name = mysqli_real_escape_string($connect, $data->firstname);       
      $last_name = mysqli_real_escape_string($connect, $data->lastname);  
      $query = "INSERT INTO tbl_user(first_name, last_name) VALUES ('$first_name', '$last_name')";  
      if(mysqli_query($connect, $query))  
      {  
           echo "Data Inserted...";  
      }  
      else  
      {  
           echo 'Error';  
      }  
 }  
 ?>  

    AngularJS Tutorial with PHP - Fetch / Select Data from Mysql Database


    Source Code

    Database


     --  
     -- Table structure for table `tbl_user`  
     --  
     CREATE TABLE IF NOT EXISTS `tbl_user` (  
      `id` int(11) NOT NULL AUTO_INCREMENT,  
      `first_name` varchar(200) NOT NULL,  
      `last_name` varchar(200) NOT NULL,  
      PRIMARY KEY (`id`)  
     ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;  
     --  
     -- Dumping data for table `tbl_user`  
     --  
     INSERT INTO `tbl_user` (`id`, `first_name`, `last_name`) VALUES  
     (31, 'Tom', 'Cruze'),  
     (30, 'Bill', 'Gates'),  
     (29, 'John', 'Smith'),  
     (28, 'Big', 'Show'),  
     (27, 'Smith', 'Johnson'),  
     (26, 'The', 'Rock'),  
     (25, 'Peter', 'Parker'),  
     (18, 'Mark', 'John');  
    

    index.php


     <!DOCTYPE html>  
     <!-- index.php !-->  
     <html>  
          <head>  
               <title>Webslesson Tutorial | AngularJS Tutorial with PHP - Fetch / Select Data from Mysql Database</title>  
               <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />  
               <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>  
          </head>  
          <body>  
               <br /><br />  
               <div class="container" style="width:500px;">  
                    <h3 align="center">AngularJS Tutorial with PHP - Fetch / Select Data from Mysql Database</h3>  
                    <div ng-app="myapp" ng-controller="usercontroller" ng-init="displayData()">  
                         <label>First Name</label>  
                         <input type="text" name="first_name" ng-model="firstname" class="form-control" />  
                         <br />  
                         <label>Last Name</label>  
                         <input type="text" name="last_name" ng-model="lastname" class="form-control" />  
                         <br />  
                         <input type="submit" name="btnInsert" class="btn btn-info" ng-click="insertData()" value="ADD"/>  
                         <br /><br />  
                         <table class="table table-bordered">  
                              <tr>  
                                   <th>First Name</th>  
                                   <th>Last Name</th>  
                              </tr>  
                              <tr ng-repeat="x in names">  
                                   <td>{{x.first_name}}</td>  
                                   <td>{{x.last_name}}</td>  
                              </tr>  
                         </table>  
                    </div>  
               </div>  
          </body>  
     </html>  
     <script>  
     var app = angular.module("myapp",[]);  
     app.controller("usercontroller", function($scope, $http){  
          $scope.insertData = function(){  
               $http.post(  
                    "insert.php",  
                    {'firstname':$scope.firstname, 'lastname':$scope.lastname}  
               ).success(function(data){  
                    alert(data);  
                    $scope.firstname = null;  
                    $scope.lastname = null;  
                    $scope.displayData();  
               });  
          }  
          $scope.displayData = function(){  
               $http.get("select.php")  
               .success(function(data){  
                    $scope.names = data;  
               });  
          }  
     });  
     </script>  
    

    select.php


     <?php  
     //select.php  
     $connect = mysqli_connect("localhost", "root", "", "testing");  
     $output = array();  
     $query = "SELECT * FROM tbl_user";  
     $result = mysqli_query($connect, $query);  
     if(mysqli_num_rows($result) > 0)  
     {  
          while($row = mysqli_fetch_array($result))  
          {  
               $output[] = $row;  
          }  
          echo json_encode($output);  
     }  
     ?>  
    

      AngularJS Tutorial with PHP - Delete Mysql Table Data

      Source Code


       <!DOCTYPE html>  
       <!-- index.php !-->  
       <html>  
            <head>  
                 <title>Webslesson Tutorial | AngularJS Tutorial with PHP - Delete Mysql Table Data</title>  
                 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />  
                 <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>  
            </head>  
            <body>  
                 <br /><br />  
                 <div class="container" style="width:500px;">  
                      <h3 align="center">AngularJS Tutorial with PHP - Delete Mysql Table Data</h3>  
                      <div ng-app="myapp" ng-controller="usercontroller" ng-init="displayData()">  
                           <label>First Name</label>  
                           <input type="text" name="first_name" ng-model="firstname" class="form-control" />  
                           <br />  
                           <label>Last Name</label>  
                           <input type="text" name="last_name" ng-model="lastname" class="form-control" />  
                           <br />  
                           <input type="hidden" ng-model="id" />  
                           <input type="submit" name="btnInsert" class="btn btn-info" ng-click="insertData()" value="{{btnName}}"/>  
                           <br /><br />  
                           <table class="table table-bordered">  
                                <tr>  
                                     <th>First Name</th>  
                                     <th>Last Name</th>  
                                     <th>Update</th>  
                                     <th>Delete</th>  
                                </tr>  
                                <tr ng-repeat="x in names">  
                                     <td>{{x.first_name}}</td>  
                                     <td>{{x.last_name}}</td>  
                                     <td><button ng-click="updateData(x.id, x.first_name, x.last_name)" class="btn btn-info btn-xs">Update</button></td>  
                                     <td><button ng-click="deleteData(x.id )"class="btn btn-danger btn-xs">Delete</button></td>  
                                </tr>  
                           </table>  
                      </div>  
                 </div>  
            </body>  
       </html>  
       <script>  
       var app = angular.module("myapp",[]);  
       app.controller("usercontroller", function($scope, $http){  
            $scope.btnName = "ADD";  
            $scope.insertData = function(){  
                 if($scope.firstname == null)  
                 {  
                      alert("First Name is required");  
                 }  
                 else if($scope.lastname == null)  
                 {  
                      alert("Last Name is required");  
                 }  
                 else  
                 {  
                      $http.post(  
                           "insert.php",  
                           {'firstname':$scope.firstname, 'lastname':$scope.lastname, 'btnName':$scope.btnName, 'id':$scope.id}  
                      ).success(function(data){  
                           alert(data);  
                           $scope.firstname = null;  
                           $scope.lastname = null;  
                           $scope.btnName = "ADD";  
                           $scope.displayData();  
                      });  
                 }  
            }  
            $scope.displayData = function(){  
                 $http.get("select.php")  
                 .success(function(data){  
                      $scope.names = data;  
                 });  
            }  
            $scope.updateData = function(id, first_name, last_name){  
                 $scope.id = id;  
                 $scope.firstname = first_name;  
                 $scope.lastname = last_name;  
                 $scope.btnName = "Update";  
            }  
            $scope.deleteData = function(id){  
                 if(confirm("Are you sure you want to delete this data?"))  
                 {  
                      $http.post("delete.php", {'id':id})  
                      .success(function(data){  
                           alert(data);  
                           $scope.displayData();  
                      });  
                 }  
                 else  
                 {  
                      return false;  
                 }  
            }  
       });  
       </script>  
      

      delete.php


       <?php  
       //delete.php  
       $connect = mysqli_connect("localhost", "root", "", "testing");  
       $data = json_decode(file_get_contents("php://input"));  
       if(count($data) > 0)  
       {  
            $id = $data->id;  
            $query = "DELETE FROM tbl_user WHERE id='$id'";  
            if(mysqli_query($connect, $query))  
            {  
                 echo 'Data Deleted';  
            }  
            else  
            {  
                 echo 'Error';  
            }  
       }  
       ?>  
      

        AngularJS Tutorial with PHP - Update / Edit Mysql Table Data

        Hello friends in this blog we are going to learn how to update or Edit Mysql table data by using Angular Javascript with PHP script. In previous post we have learn about how to fetch or select data from Mysql database table and display that data on web page without page refresh. But We have move one step ahead like how to edit inserted data by using PHP with Angular Javascript framework. If you have work on any project with Angular Javascipt Framework with PHP and if you work with form data, so at that time you have to required to update data which you have insert into the system, so how to update form data by using Angular Javascript with PHP programming without page refresh event. With help of Angular Javascript directive we can update Mysql table data by using PHP code from back end side operation and we can update data on front end side by using Angular Javascript function without page refresh event. So this is my tutorial on how to update mysql data by using Angular Javascript with php language. In this blog we have make update data function with three argument, when user click on update button textbox are filled with data and we have write php code for update data, we have also discuss how to change button name as per requirement and last and very important things like required field validation also we have discuss in this video which attached with this post.


        Source Code

        index.php


         <!DOCTYPE html>  
         <!-- index.php !-->  
         <html>  
              <head>  
                   <title>Webslesson Tutorial | AngularJS Tutorial with PHP - Update / Edit Mysql Table Data</title>  
                   <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />  
                   <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>  
              </head>  
              <body>  
                   <br /><br />  
                   <div class="container" style="width:500px;">  
                        <h3 align="center">AngularJS Tutorial with PHP - Update / Edit Mysql Table Data</h3>  
                        <div ng-app="myapp" ng-controller="usercontroller" ng-init="displayData()">  
                             <label>First Name</label>  
                             <input type="text" name="first_name" ng-model="firstname" class="form-control" />  
                             <br />  
                             <label>Last Name</label>  
                             <input type="text" name="last_name" ng-model="lastname" class="form-control" />  
                             <br />  
                             <input type="hidden" ng-model="id" />  
                             <input type="submit" name="btnInsert" class="btn btn-info" ng-click="insertData()" value="{{btnName}}"/>  
                             <br /><br />  
                             <table class="table table-bordered">  
                                  <tr>  
                                       <th>First Name</th>  
                                       <th>Last Name</th>  
                                       <th>Update</th>  
                                  </tr>  
                                  <tr ng-repeat="x in names">  
                                       <td>{{x.first_name}}</td>  
                                       <td>{{x.last_name}}</td>  
                                       <td><button ng-click="updateData(x.id, x.first_name, x.last_name)" class="btn btn-info btn-xs">Update</button></td>  
                                  </tr>  
                             </table>  
                        </div>  
                   </div>  
              </body>  
         </html>  
         <script>  
         var app = angular.module("myapp",[]);  
         app.controller("usercontroller", function($scope, $http){  
              $scope.btnName = "ADD";  
              $scope.insertData = function(){  
                   if($scope.firstname == null)  
                   {  
                        alert("First Name is required");  
                   }  
                   else if($scope.lastname == null)  
                   {  
                        alert("Last Name is required");  
                   }  
                   else  
                   {  
                        $http.post(  
                             "insert.php",  
                             {'firstname':$scope.firstname, 'lastname':$scope.lastname, 'btnName':$scope.btnName, 'id':$scope.id}  
                        ).success(function(data){  
                             alert(data);  
                             $scope.firstname = null;  
                             $scope.lastname = null;  
                             $scope.btnName = "ADD";  
                             $scope.displayData();  
                        });  
                   }  
              }  
              $scope.displayData = function(){  
                   $http.get("select.php")  
                   .success(function(data){  
                        $scope.names = data;  
                   });  
              }  
              $scope.updateData = function(id, first_name, last_name){  
                   $scope.id = id;  
                   $scope.firstname = first_name;  
                   $scope.lastname = last_name;  
                   $scope.btnName = "Update";  
              }  
         });  
         </script>  
        



        insert.php


         <?php  
         //insert.php  
         $connect = mysqli_connect("localhost", "root", "", "testing");  
         $data = json_decode(file_get_contents("php://input"));  
         if(count($data) > 0)  
         {  
              $first_name = mysqli_real_escape_string($connect, $data->firstname);       
              $last_name = mysqli_real_escape_string($connect, $data->lastname);  
              $btn_name = $data->btnName;  
              if($btn_name == "ADD")  
              {  
                   $query = "INSERT INTO tbl_user(first_name, last_name) VALUES ('$first_name', '$last_name')";  
                   if(mysqli_query($connect, $query))  
                   {  
                        echo "Data Inserted...";  
                   }  
                   else  
                   {  
                        echo 'Error';  
                   }  
              }  
              if($btn_name == 'Update')  
              {  
                   $id = $data->id;  
                   $query = "UPDATE tbl_user SET first_name = '$first_name', last_name = '$last_name' WHERE id = '$id'";  
                   if(mysqli_query($connect, $query))  
                   {  
                        echo 'Data Updated...';  
                   }  
                   else  
                   {  
                        echo 'Error';  
                   }  
              }  
         }  
         ?>  

        Alternative content