vnfaster@gmail.com

Tạo trang đăng bài cho thành viên wordpress không cần plugin

Tạo trang đăng bài cho thành viên wordpress không cần plugin một cách chuyên nghiêp dễ dàng tùy biến theo ý muốn.

Có khá nhiều bạn quan tâm đến vấn đề tạo trang đăng bài cho thành viên như ở Vnkings.Com vậy nên trong bài viết này Mình sẽ giúp các bạn tạo được 1 trang đăng bài như thế một cách đơn giản nhất.Tạo trang đăng bài cho thành viên wordpress không cần plugin

Ưu điểm Tạo trang đăng bài cho thành viên wordpress không cần plugin :

  • Dễ dàng tùy biến theo ý muốn
  • không sử dụng quá nhiều trường không cần thiết khi đăng bài
  • Không cần sử dụng javascript như Plugin, giúp cho Website bạn load nhẹ hơn

Nhược điểm

  • Bạn cần có 1 chút kiến thức cơ bản về html,php nếu muốn hiểu hơn về cách làm trang này.

 

Bắt đầu nào :

Đầu tiên Bạn cần tạo 1 file đăng bài: dang-bai.php
Mình sẽ viết và giải thích từng phần. Sau đó sẽ có 1 file hoàn tất.

 

– kiểm tra xem thành viên đã đăng ký hay chưa, nếu đã đăng ký thì lấy thông tin thành viên, ngược lại nếu chưa đăng ký thì hiện khung đăng nhập:

<?php
/*
 Template Name: Đăng bài
 */
 ?>
<?php if(is_user_logged_in()) {
$user_id = get_current_user_id();
$current_user = wp_get_current_user();
$vnkings =  $current_user->user_level;
if($vnkings <= 2) { $vnstatus = "pending"; } else { $vnstatus = "publish"; }
?>
// form đăng bài
<?php } else { ?>
<div class="formdangnhap">
    <?php wp_login_form(); ?>            
</div>
<?php } ?>

Giải thích đoạn code :

  • Template Name: Đăng bài : Tạo template Đăng bài.
  • if(is_user_logged_in()) { : Nếu là thành viên đăng nhập.
  • $user_id = get_current_user_id(); : Lấy id của thành viên.
  • $current_user = wp_get_current_user(); : Lấy tất cả thông tin thành viên.
  • $vnkings = $current_user->user_level; : Lấy User level.
  • if($vnkings <= 2) { $vnstatus = “pending”; } else { $vnstatus = “publish”; } : Kiểm tra user đang là quyền gì, nếu là Thành viên đăng ký thì bài viết sẽ được cho vào dạng chờ xét duyệt, nếu là Tác giả trở lên thì cho phép Public bài viết luôn.
  • wp_login_form(); : form đăng nhập mặc định của wordpress

 

-Thêm form đăng bài : trong form này mình đã tạo theo cấu trúc của Bootstrap cho các bạn dễ tùy biến.

<div id="vnkings_postBox">
	<form id="new_post" class="form-horizontal" method="post" action="" enctype="multipart/form-data">
		<div class="form-group vnking_pd col-sm-12 col-md-6">
			<label for="post_title">Tiêu đề</label>
			<input type="text" name="post_title" class="form-control" placeholder="Tiêu đề">
		</div>
		<div class="form-group vnking_pd pd_0">
		  <label for="post_content">Nội Dung</label>
		  <?php wp_editor( '', 'userpostcontent', array( 'textarea_name' => 'post_content' ));?>
		</div>
		<div class="form-group vnking_pd col-md-6">
		  <label for="post_content">Danh mục</label>
			<?php $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0");
				preg_match_all('/\s*<option class="(\S*)" value="(\S*)">(.*)<\/option>\s*/', $categories, $matches, PREG_SET_ORDER);
				echo "<select id='post_category' class='form-control' name='post_category'>";
				foreach ($matches as $match){
				echo "<option value='{$match[2]}'>{$match[3]}</option>";
				}
				echo "</select><br />\n";
			?>
		</div>
		<div class="form-group vnking_pd col-md-6">
		  <label for="post_tags">Từ khóa</label>
		  <input type="text" name="post_tags" class="form-control" placeholder="Từ khóa">
		</div>
		<div class="form-group">
			<p><img id="output_avatar"/></p>
			<script>
			  var loadFile = function(event) {
				var output = document.getElementById('output_avatar');
				output.src = URL.createObjectURL(event.target.files[0]);
				 $('#output_avatar').addClass('active-avatar');
			  };
			</script>
			<span class="btn btn-default btn-file">Hình ảnh bài viết <input class="input-file" accept="image/*" name="file" type="file" class="file" onchange="loadFile(event)">
			</span>
		</div>
		<input type="hidden" name="add_new_post" value="post" />
		<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
		<div class="form-group">
			<div class="col-sm-12" style="padding-left:0;">
			  <button type="submit" class="btn btn-primary">Đăng Bài</button>
			</div>
		</div>
	</form>
</div>

Giải thích đoạn code :

Trong form này các bạn cần tạo các trường cơ bản như :

  • input name=”post_title” :Nhập Tiêu đề
  • wp_editor() :Tạo Form nội dung mặc định của WordPress
  • wp_dropdown_categories() : Chọn danh mục cho bài viết của bạn
  • input name=”post_tags” : Nhập tags bài viết
  • input name=”file” : Tạo ảnh đại diện bài viết
  • wp_nonce_field() : Bảo mật cho form bài viết, giúp chứng thực sự hoạt động của người dùng nếu form đăng bài gửi đi

– Kiểm tra dữ liệu và đăng bài viết

<?php if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty( $_POST['add_new_post'] ) && current_user_can('level_0') && isset( $_POST['post_nonce_field'] ) && wp_verify_nonce( $_POST['post_nonce_field'], 'post_nonce' )) {
if (isset($_POST['post_title'])) {
	$post_title = $_POST['post_title'];
}
if (isset($_POST['post_content'])) {
	$post_content = $_POST['post_content'];
}
else {
	echo 'Please enter the content';
}
if (isset ($_POST['post_category'])) {
	$post_category = $_POST['post_category'];
}
if (isset($_POST['post_tags'])) {
	$post_tags = $_POST['post_tags'];
}
$post = array(
	'post_title'    => wp_strip_all_tags($post_title),
	'post_content'  => $post_content,
	'post_category' => array($post_category),
	'tags_input'    => $post_tags,
	'post_status'   => $vnstatus,
	'post_type' => 'post',
);
$vnkings_post_id = wp_insert_post($post);

if ($_FILES) {
	foreach ($_FILES as $file => $array) {
	$newupload = insert_attachment($file,$vnkings_post_id);
	}
}
echo '<div class="alert alert-success"><strong>Bạn đã đăng bài thành công!</strong></div>';
}?>

Giải thích đoạn code : :

  • if( $_SERVER[‘REQUEST_METHOD’] == ‘POST’ && !empty( $_POST[‘add_new_post’] ) : Khi có hành động gửi bài viết có yêu cầu là POST
  • current_user_can(‘level_0’) : thành viên cần là thành viên đăng ký
  • isset( $_POST[‘post_nonce_field’] ) && wp_verify_nonce( $_POST[‘post_nonce_field’], ‘post_nonce’ ) : Tồn tại và xác nhận trường post_nonce_field (Bảo mật)
  • if (isset($_POST[‘tên trường’])) : Kiểm tra đã nhập các trường bên trên hay chưa.
  • $post = array() Tổng hợp các trường vào 1 mảng với cấu trúc của WordPress
  • wp_insert_post($post) Tiến hành thêm bài viết với các trường đã được nhập
  • if ($_FILES) – insert_attachment() Nếu tồn tại file ảnh thì thực hiện thêm vào ảnh đại diện

Như vậy chúng ta có File dang-bai.php đầy đủ như sau :

<?php
/*
 Template Name: Đăng bài
 */
?>
<?php if(is_user_logged_in()) {
$user_id = get_current_user_id();
$current_user = wp_get_current_user();
$vnkings =  $current_user->user_level;
if($vnkings <= 2) { $vnstatus = "pending"; } else { $vnstatus = "publish"; }
?>

<div id="vnkings_postBox">
	<form id="new_post" class="form-horizontal" method="post" action="" enctype="multipart/form-data">
		<div class="form-group vnking_pd col-sm-12 col-md-6">
			<label for="post_title">Tiêu đề</label>
			<input type="text" name="post_title" class="form-control" placeholder="Tiêu đề">
		</div>
		<div class="form-group vnking_pd pd_0">
		  <label for="post_content">Nội Dung</label>
		  <?php wp_editor( '', 'userpostcontent', array( 'textarea_name' => 'post_content' ));?>
		</div>
		<div class="form-group vnking_pd col-md-6">
		  <label for="post_content">Danh mục</label>
			<?php $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0");
				preg_match_all('/\s*<option class="(\S*)" value="(\S*)">(.*)<\/option>\s*/', $categories, $matches, PREG_SET_ORDER);
				echo "<select id='post_category' class='form-control' name='post_category'>";
				foreach ($matches as $match){
				echo "<option value='{$match[2]}'>{$match[3]}</option>";
				}
				echo "</select><br />\n";
			?>
		</div>
		<div class="form-group vnking_pd col-md-6">
		  <label for="post_tags">Từ khóa</label>
		  <input type="text" name="post_tags" class="form-control" placeholder="Từ khóa">
		</div>
		<div class="form-group">
			<p><img id="output_avatar"/></p>
			<script>
			  var loadFile = function(event) {
				var output = document.getElementById('output_avatar');
				output.src = URL.createObjectURL(event.target.files[0]);
				 $('#output_avatar').addClass('active-avatar');
			  };
			</script>
			<span class="btn btn-default btn-file">Hình ảnh bài viết <input class="input-file" accept="image/*" name="file" type="file" class="file" onchange="loadFile(event)">
			</span>
		</div>
		<input type="hidden" name="add_new_post" value="post" />
		<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
		<div class="form-group">
			<div class="col-sm-12" style="padding-left:0;">
			  <button type="submit" class="btn btn-primary">Đăng Bài</button>
			</div>
		</div>
	</form>
</div>
<?php if( $_SERVER['REQUEST_METHOD'] == 'POST' && !empty( $_POST['add_new_post'] ) && current_user_can('level_0') && isset( $_POST['post_nonce_field'] ) && wp_verify_nonce( $_POST['post_nonce_field'], 'post_nonce' )) {
if (isset($_POST['post_title'])) {
	$post_title = $_POST['post_title'];
}
if (isset($_POST['post_content'])) {
	$post_content = $_POST['post_content'];
}
else {
	echo 'Please enter the content';
}
if (isset ($_POST['post_category'])) {
	$post_category = $_POST['post_category'];
}
if (isset($_POST['post_tags'])) {
	$post_tags = $_POST['post_tags'];
}
$post = array(
	'post_title'    => wp_strip_all_tags($post_title),
	'post_content'  => $post_content,
	'post_category' => array($post_category),
	'tags_input'    => $post_tags,
	'post_status'   => $vnstatus,
	'post_type' => 'post',
);
$vnkings_post_id = wp_insert_post($post);

if ($_FILES) {
	foreach ($_FILES as $file => $array) {
	$newupload = insert_attachment($file,$vnkings_post_id);
	}
}
echo '<div class="alert alert-success"><strong>Bạn đã đăng bài thành công!</strong></div>';
}?>

<?php } else { ?>
<div class="formdangnhap">
	<?php wp_login_form(); ?>			
</div>
<?php } ?>

Chưa hết, bạn cần thêm 1 đoạn Function hỗ trợ đoạn thêm ảnh đại diện bài viết ở bên trên
– Thêm đoạn function này vào file Functions.php trong thư mục Theme WordPress bạn đang sử dụng:

add_action('init', 'do_output_buffer');
function do_output_buffer() {
        ob_start();
}
function insert_attachment($file_handler,$post_id,$setthumb='false') {
    // check to make sure its a successful upload
    if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false();
    require_once(ABSPATH . "wp-admin" . '/includes/image.php');
    require_once(ABSPATH . "wp-admin" . '/includes/file.php');
    require_once(ABSPATH . "wp-admin" . '/includes/media.php');
    $attach_id = media_handle_upload( $file_handler, $post_id );
 
    if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
    return $attach_id;
}

– Cuối cùng là bạn vào Trang quản trị > Trang > Tạo trang > Đăng bài (chọn template là Đăng bài):

Tạo trang đăng bài cho thành viên wordpress không cần plugin

Sau đó bạn có thể xem kết quả với link page vừa tạo
Demo đăng bài vnkings : https://vnkings.com/dang-bai.html

Với các bước bên trên bạn đã tạo được cho mình 1 trang đăng bài viết cho thành viên ở WordPress mà không cần sử dụng đến Plugin

Chúc các bạn thành công!

Bài liên quan

    • Đầu tiên bạn tạo 1 template là đăng ký, sau đó thêm đoạn code kia vào. tiếp đến vào tạo trang chọn template đăng ký kia là xong nhé
      —————————————–
      Mình vừa teamview cho bạn rồi nhé

      • bác cho em ? sao em bị lỗi không lấy ra chuyên mục được vậy ạ Warning: preg_match_all(): Unknown modifier ‘o’ in C:\xampp\htdocs\oto.com\wp-content\themes\accelerate\page-templates\dangbai.php on line 34 lỗi này là lỗi gì nhỉ bác ơi

          • em cũng bị lỗi như này bác cho em ? sao em bị lỗi không lấy ra chuyên mục được vậy ạ Warning: preg_match_all(): Unknown modifier ‘o’

            và dòng đó của em là bị cái này ạ

            <?php $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0");
            preg_match_all('/s*(.*)s*/’, $categories, $matches, PREG_SET_ORDER);
            echo “”;
            foreach ($matches as $match){
            echo “{$match[3]}”;
            }
            echo “n”;
            ?>

    • Nếu bạn muốn upload nhiều hình thì có thể dùng cách này:
      phần input upload bạn thay bằng:

         <input type="file" id="image" name="image[]" onchange="updateList();" multiple="multiple" >
         <ul id="file_list"></ul>
      <script>
      function updateList(){
          //get the input and UL list
          var input = document.getElementById('image');
          var list = document.getElementById('file_list');
      
          //empty list for now...
          while (list.hasChildNodes()) {
            list.removeChild(ul.firstChild);
          }
      
          //for every file...
          for (var x = 0; x < input.files.length; x++) {
            //add to list
            var li = document.createElement('li');
            li.innerHTML = 'File ' + (x + 1) + ':  ' + input.files[x].name;
            list.append(li);
          }
      }
      </script>
      

      Tiếp theo bạn cần đoạn function này để xử lý ảnh upload lên:

      function fix_file_array(&$files) {
          $names = array(
              'name' => 1,
              'type' => 1,
              'tmp_name' => 1,
              'error' => 1,
              'size' => 1
          );
          foreach ($files as $key => $part) {
              // only deal with valid keys and multiple files
              $key = (string) $key;
              if (isset($names[$key]) && is_array($part)) {
                  foreach ($part as $position => $value) {
                      $files[$position][$key] = $value;
                  }
                  // remove old key reference
                  unset($files[$key]);
              }
          }
      }
      
      
      function insert_attachment($file_handler,$post_id,$setthumb='false') {
          require_once(ABSPATH . "wp-admin" . '/includes/image.php');
          require_once(ABSPATH . "wp-admin" . '/includes/file.php');
          require_once(ABSPATH . "wp-admin" . '/includes/media.php');
          $attach_id = media_handle_sideload( $file_handler, $post_id );
          if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
          return $attach_id;
      }
      

      Cuối cùng là đoạn check nếu có file ở dưới đoạn input :

      if ($_FILES) {
          fix_file_array($_FILES[$name]);
          foreach ($_FILES[$name] as $file => $fileitem){
              $newupload = insert_attachment($fileitem,$real_post_id);
          }
      }
      

      Chúc bạn thành công

    • Bạn có dùng Teamview không, mình giúp bạn tạo trang đăng nhập.
      Vì cấu trúc trang bạn và trang mình khác nhau nêu có đưa bạn cả file cũng không hợp HTML/CSS

      • Chào Bạn, bài viết rất hay. Xong theme của mình CSS không đúng nên bị vỡ bể hết, mặc dù các thuộc tính có hiển thị. Bạn có thể Edit bằng team view cho mình được không ? Cảm ơn và có hậu tạ bạn nhé. Số của mình 0968.022.948

  1. Bạn cho mình hỏi chút được không vậy. Mình muốn tạo 1 page đăng bài cho thành viên nhưng trong bài đăng yêu cầu có hình ảnh, kích cỡ chính xác và bắt buộc kích cỡ như vậy mới được đăng. Thứ hai là phần quản lý sét duyệt. VD như đăng bài xong mình phải duyệt bài mới cho đăng. Bạn có thể giúp mình được không vậy. Thanks !

    • Vấn đề 1 :
      Bạn có thể dùng 1 đoạn javascript để check kích cỡ và dung lượng:

      $('.btn-primary').click( function() {
         //kiểm tra trình duyệt có hỗ trợ File API
          if (window.File && window.FileReader && window.FileList && window.Blob)
          {
             // lấy dung lượng và kích thước, kiểu file từ input
              var fsize = $('#i_file')[0].files[0].size;
              var ftype = $('#i_file')[0].files[0].type;
              var fname = $('#i_file')[0].files[0].name;
       
              if(fsize>1048576)  //thuc hiện lệnh nếu dung lượng vượt quá 1MB
              {
                  alert("Type :"+ ftype +" | "+ fsize +" bites\n(File: "+fname+") Quá lớn!");
              }else{
                  alert("Type :"+ ftype +" | "+ fsize +" bites\n(File :"+fname+") File ổn đó!");
              }
          }else{
              alert("Vui lòng nâng cấp trình duyệt của bạn, bởi vì trình duyệt hiện tại của bạn thiếu một số tính năng mới, chúng ta cần!");
          }
      });
      

      Vấn đề 2
      bài viết trên mình có 1 đoạn check user : nếu là tác giả trở lên thì cho phép bài publish luôn, còn là thành viên đang ký thì sẽ dạng chờ xét duyệt, bạn cũng có thể sửa nó để tác giả cũng cần duyệt :

      if($vnkings <= 2) { $vnstatus = "pending"; } else { $vnstatus = "publish"; }
      // thay số 2 thành số 3 thì tác giả cũng cần duyệt bạn nhé
      

      Mong nó giúp được bạn!

  2. if ($_FILES) {
    fix_file_array($_FILES[$name]);
    foreach ($_FILES[$name] as $file => $fileitem){
    $newupload = insert_attachment($fileitem,$real_post_id);
    }
    }

    Đoạn này chèn dưới input cụ thể là chỗ nào cậu?
    Phần danh mục nó cũng không hiện Category ra nữa

  3. Warning: preg_match_all(): Unknown modifier ‘o’ in C:\xampp\htdocs\oto.com\wp-content\themes\accelerate\page-templates\dangbai.php on line 34 lỗi này là lỗi gì nhỉ bác ơi

  4. Cám bài viết chi tiết của ad. trước mình có nghĩ tới việc tạo trang đăng bài nhưng là sử dụng plugin. Nhung thấy cái giao diện của plugin xấu quá. Sẽ áp dụng thử cách này của bạn.

  5. Chưa hiểu lắm, làm theo mà sao không có phần template Đăng Bài khi tạo trang mới !
    Cũng chưa thấy mối liên hệ giữa file dang-bai.php với funtion ?
    Giải thích cụ thể hơn được không bạn ơi ?

    • Vấn đề 1:
      Sau khi bạn tạo 1 file php có nội dung như sau :

      <?php
      /*
       Template Name: Đăng bài
       */
       ?>
      

      Thì trong phần chọn template page sẽ có thêm 1 cái là : Đăng bài
      Bạn xem lại xem trong file dang-bai.php đã có đoạn đó chưa nhé.

      Vấn đề 2:
      Mối liên hệ giữa dang-bai.php với funtions:
      Bạn có thể thấy trong file dang-bai.php có 1 đoạn là

      $newupload = insert_attachment($file,$vnkings_post_id);
      

      Và 1 đoạn chèn vào funtions để xử lý cho yêu cầu insert_attachment là:

      function insert_attachment
  6. nếu up kiểu này thì nó sẽ có 2 ảnh trên thư viện, up ảnh đại diện thì sẽ có 1 cái và ảnh thư viện 1 cái nữa.
    có cách nào để up 1 ảnh dùng cho cả 2 k ad

    • Bạn có thể thêm các input vào:

      <div class="form-group vnking_pd col-md-6">
                <label for="post_tags">Trường của bạn</label>
                <input type="text" name="post_truongcuaban" class="form-control" placeholder="Trường của bạn">
      </div>
      

      Tiếp đến trong phần update dữ liệu.
      Tìm:

      $vnkings_post_id = wp_insert_post($post);

      Thêm vào sau:

      $post_truongcuaban = $_POST['post_truongcuaban'];
      update_post_meta($vnkings_post_id,'post_truongcuaban',$post_truongcuaban);
      

      Chúc bạn thành công!

  7. Mình tạo xong tất cae đều ok nhưng bị lỗi thế này ở chỗ chọn danh mục
    Warning: preg_match_all(): Unknown modifier ‘o’ in /home/xxx/wp-content/themes/xxx/dangbai.php on line 40

    • Bạn kiểm tra xem Theme của bạn ở Header có:

      <?php wp_head(); ?>

      và footer có:

      <?php wp_footer(); ?>

      Chưa nhé, đây là các hàm lấy ra các file css, js, ajax hỗ trợ cho Form.

  8. Những bạn bị lỗi không tương thích với hàm preg_match_all():

    Warning: preg_match_all(): Unknown modifier
    

    Thì thay code chỗ category:

    <?php $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0");
                    preg_match_all('/s*<option class="(S*)" value="(S*)">(.*)</option>s*/', $categories, $matches, PREG_SET_ORDER);
                    echo "<select id='post_category' class='form-control' name='post_category'>";
                    foreach ($matches as $match){
                    echo "<option value='{$match[2]}'>{$match[3]}</option>";
                    }
                    echo "</select><br />n";
                ?>
    

    Thành:

    <?php $categories = wp_dropdown_categories( array( 'echo' => 0, 'taxonomy' => 'category', 'hide_empty' => 0 ) );
    $categories = str_replace( "name='cat' id=", "name='post_category' id=", $categories );
    echo $categories; ?>
    

    Cảm ơn các bạn đã luôn ủng hộ Vnkings.com

    • Em xem trên File Header.php có:

      <?php wp_head(); ?>

      File Footer.php có:

      <?php wp_footer(); ?>

      Kiểm tra xem có chưa nhé.
      Đây là các các hàm lấy ra các đoạn script hỗ trợ mặc định của wordpress cho Front-end.

  9. Bạn ơi, lúc mà mình k chọn ảnh đại diện, vẫn tạo đc bài viết, nhưng mà vào trong dashboard thì lỗi chỗ hình đại diện, nên cái khung soạn thảo lỗi theo, còn chọn ảnh đại diện lúc post thì k có lỗi j hết

    • Nếu bạn muốn trường đó là trường bắt buộc nhập thì ở phần input file:

      <span class="btn btn-default btn-file">Hình ảnh bài viết <input class="input-file" accept="image/*" name="file" type="file" class="file" onchange="loadFile(event)">

      Bạn thêm đoạn này vào nhé:

      required=""

      kết quả sẽ là:

      <span class="btn btn-default btn-file">Hình ảnh bài viết <input class="input-file" accept="image/*" name="file" required="" type="file" class="file" onchange="loadFile(event)">

      Sau khi hoàn thành, ai viết bài ở web bạn sẽ bắt buộc phải up ảnh đại diện, nêu không nó không cho đăng bài.

  10. Cho em hỏi là nếu post của em có custom taxonomies và custom fields thì làm sao để có thể cho người dùng nhập vào các trường này ở trang đăng bài được vậy ad?

  11. Chào bạn,

    Mình làm giống bạn thì đăng bài được. Nhưng nếu đăng nhập vào bằng user có quyền là thành viên đăng ký thì lại không hiện ra mục thêm media để chèn ảnh vào bài viết. Làm sao để cấp quyền cho user trong nhóm thành viên đăng ký cũng chèn ảnh được.
    2/ Trong mục quản lý media, có cách nào cấm người dùng xoá ảnh không phải do mình đăng được không, vì có những user khác lỡ tay xoá mất hình thì bài cũ sẽ bị mất hình đăng.
    Cám ơn

  12. Warning: preg_match_all(): Unknown modifier ‘o’ in /home/u918119383/public_html/wp-content/themes/lighthouse/dang-bai.php on line 35
    em bị lỗi này thì sửa sao được ạ

    Code dong 35:

    preg_match_all(‘/s*(.*)s*/’, $categories, $matches, PREG_SET_ORDER);

  13. get_queried_object(); wp_editor( $post_obj->post_content, ‘userpostcontent’, array( ‘textarea_name’ => ‘post_content’ ));?>

    Đoạn này em thêm vào rồi, nhưng các nút soạn thảo không hiển thị, rồi nút thêm hình ảnh cũng không hoạt động là sao vậy ạ https://prnt.sc/fampv0

    • Em kiểm tra xem file header.php có:

      <?php wp_head(); ?>

      File footer.php có

      <?php wp_footer(); ?>

      không nhé, đây là các hàm lấy thư viện css và js hỗ trợ cho các chức năng ngoài Front end.

  14. Là thành viên đăng kí thì không hiện nút add media a ơi..làm sao để thành viên củng add được ảnh cho bài viết ạ.

    • Bạn để ý dòng này:

      <?php $post_obj = $wp_query->get_queried_object(); wp_editor( $post_obj->post_content, 'userpostcontent', array( 'textarea_name' => 'post_content' ));?>
      

      Thêm:

      'media_buttons' => true

      Hoàn chỉnh:

      <?php $post_obj = $wp_query->get_queried_object(); wp_editor( $post_obj->post_content, 'userpostcontent', array( 'textarea_name' => 'post_content','media_buttons' => true ));?>
      
      • A ơi giờ e muốn chỗ thêm ảnh hiển thị cho bài viết thì lấy ảnh từ thư viện media wordpress để giảm bớt trường hợp ảnh đã có trong thư viện rồi thì làm sao ạ

      • mình thêm ‘media_buttons’ => true mà vẫn ko lên được add à, dưới local ko thêm thì vẫn chạy bình thường , lên host thì mất

  15. add cho mình hỏi với , cái nút thêm media của mình ở dươi local thì hiện , mà lên host thì nó lại mất hẳn luôn soi trình duyệt cũng ko thấy !…

    • Em thêm hàm

      <?php if(is_user_logged_in()) { 
      // code bảng đăng bài
      }
      ?>
      

      Như vậy chỉ những người đăng nhập mới xem được bảng đăng bài của em.

  16. Chào anh,
    Hiện em đang sử dụng đoạn code này để tự động thêm link cho từ khóa.

    function auto_add_affiliate_links($text){
    $replace_words = array(
    ‘WordPress’ => ‘Blog thủ thuật WordPress‘,
    ‘Plugin’ => ‘Cài đặt Plugin‘,
    ‘Theme Free’ => ‘Theme miễn phí
    );
    $text = str_replace(array_keys($replace_words), $replace_words, $text);
    return $text;
    }
    add_filter(‘the_content’, ‘auto_add_affiliate_links’);
    add_filter(‘the_excerpt’, ‘auto_add_affiliate_links’);

    Nhưng nó chỉ áp dụng cho phần content mặc định thôi. Bài viết của em có sử dụng cả các post meta nữa. Giờ làm sao để áp dụng được cho nó nhỉ?

    em thử thêm dòng sau thì bị lỗi.

    add_filter(‘get_post_metadata’, ‘auto_add_affiliate_links’);

    • Bạn tạo một Meta Field cho Post là: dinh_dang

      Trong file đăng bài bạn tạo thêm 1 đoạn để chọn định dạng:

       <div class="form-group">
        <label for="sel1">Định dạng bài viết</label>
        <select class="form-control" name="dinh_dang">
          <option>audio</option>
          <option>video</option>
          <option>article</option>
        </select>
      </div> 
      

      Phần xử lý bạn thêm đoạn này:

      if (isset($_POST['dinh_dang'])) {
          $dinh_dang = $_POST['dinh_dang'];
      }
      update_post_meta( $vnkings_post_id, 'dinh_dang', $dinh_dang);
      
    • Bạn có thể thêm các input vào:

      <div class="form-group vnking_pd col-md-6">
                <label for="post_gia">Giá</label>
                <input type="text" name="post_gia" class="form-control" placeholder="Giá">
      </div>
      <div class="form-group vnking_pd col-md-6">
                <label for="post_link_down">Link Download</label>
                <input type="text" name="post_link_down" class="form-control" placeholder="Link Download">
      </div>
      

      Tiếp đến trong phần update dữ liệu.
      Tìm:

      $vnkings_post_id = wp_insert_post($post);

      Thêm vào sau:

      $post_gia = $_POST['post_gia'];
      $post_link_down = $_POST['post_link_down'];
      update_post_meta($vnkings_post_id,'post_gia',$post_gia);
      update_post_meta($vnkings_post_id,'post_link_down',$post_link_down);
      

      Chúc bạn thành công!

  17. bạn ơi cho mình hỏi làm sao đưa sản phảm của nó vào danh mục sản phẩm trong woocommecer ? bạn giúp mình nhé

  18. Xin chào, mình muốn dùng hàm wp_insert_post() để đăng bài, là mình tự đăng, không phải cho thành viên khác đăng và không cần form nhập liệu, chương trình php sẽ tự get dữ liệu từ chỗ khác, ví dụ mình tạo trang là postbai.php, vậy trang này cần đặt ở thư mục nào để chạy được, cần include thêm file gì của wp… bạn chỉ mình với, mong sớm nhận được câu trả lời

    • Chào bạn, Bạn có thể tạo 1 custom page template.
      Ví dụ bạn tạo 1 file postbai.php trong thư mục theme, bạn chỉ cần thêm đoạn đầu là

      <?php
      /*
       Template Name: Đăng bài
       */
      ?>
      // code lấy và đăng tự động của bạn
      

      Sau bạn vào Trang quản trị > Page > Tạo page, rồi chọn template là: Đăng bài

      Như vậy là xong.

  19. E dùng metabox type= image_advanced để đăng nhiều hình ảnh làm sldier. Giờ ở trang đăng bài phải làm thế nào để khi người dùng đăng hình ảnh thì trong metabox của e cũng hiện những hình ảnh đó vậy anh?

      • vậy làm theo cách đăng nhiều hình ảnh của anh thì có cách nào hiển thị nó trong wp_admin không ạ? giống như đăng ảnh đại diện ở trang đăng bài thì phía trong nó hiện ảnh đại diện đó

  20. Mình làm y chang và đã post được bài. Nhưng bị lỗi nút Add Media click vào ko hiển thị hộp thoại để add media giống trong admin (nghĩa là click vô Add Media nhưng ko có hành động gì xảy ra)
    Đã có wp_head và wp_footer trong file header.php và footer.php
    Mong bạn giúp đỡ mình fix lỗi này với ạ

      • Mình xem thì nó bị lỗi gì đó liên quan tới wp_head(), nếu bỏ cái wp_head đi thì nó chạy ngon lành, vì thế mình làm theo kiểu copy hết file header qua file post-bai luôn ko sài get_header ở file post-bài nữa thì chạy ngon lành rồi. Cảm ơn bạn nha !

      • À cái ô từ khoá mình muốn nó hiện thêm phần những từ khoá đã có để thành viên click vô nó tự add từ khoá đó vô thì làm thế nào hả bạn

  21. M làm theo mà phần Danh Mục chẳng hiển thị ! Có ai rành về code giúp m với ! Ngoài danh mục theo dạng cataloge thì có thể lấy theo taxonomy của customer post không ?

  22. hi bạn, cho mình hỏi về đoạn code add thư viện ảnh, mình làm theo hướng dẫn của bạn rồi nhưng k upload hình đc.

  23. Chào anh. Khi em bấm đăng bài thì lỗi ra như vậy là sao vậy anh
    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\wordpress\wp-content\themes\twentyseventeen\functions.php on line 596

    Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\wordpress\wp-content\themes\twentyseventeen\dang-bai.php on line 103
    Bạn đã đăng bài thành công!

  24. Anh ơi cho em hỏi, em thêm 1 trường vào form vi dụ input cho ng dùng nhập địa chỉ vậy làm sao để hiện trường địa chỉ ng dùng vừa nhập vào bai viết của họ ạ, thanks anh

    • Bạn có thể thêm các input vào:

      <div class="form-group vnking_pd col-md-6">
                <label for="dia_chi">Địa chỉ</label>
                <input type="text" name="dia_chi" class="form-control" placeholder="Địa chỉ">
      </div>
      

      Tiếp đến trong phần update dữ liệu.
      Tìm:

      $vnkings_post_id = wp_insert_post($post);

      Thêm vào sau:

      $dia_chi = $_POST['dia_chi'];
      update_post_meta($vnkings_post_id,'dia_chi',$dia_chi);
      

      Như vậy bạn đã lưu được thêm trường địa chỉ cho Post.

      Sau này nếu bạn muốn hiện địa chỉ trong post đó thì vào file single.php thêm đoạn này vào chỗ bạn muốn hiển thị địa chỉ:

      <?php echo get_post_meta( get_the_ID(), 'dia_chi', true ); ?>

      Chúc bạn thành công!

  25. Bác cho em hỏi ở cái danh mục đó nó show toàn bộ danh mục ra bây giờ em chỉ muốn show danh mục cha thì code thế nào ạ mong bác giúp. thank bác

    • Bạn để ý đoạn:

      $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0");

      Bạn sửa thành:

      $categories = wp_dropdown_categories("echo=0&hide_empty=0&selected=0&depth=1");

      Nếu muốn danh mục con tiếp theo thì chỉnh depth=2 hoặc 3,4 tùy bạn (Mặc định depth=0 lấy toàn bộ cấp của danh mục).

    • Chào bạn, bạn thử kiểm tra trong function của bạn xem có đoạn nào custom wp_editor không, nếu để mặc định như bài hướng dẫn này thì trình soạn thảo trực quan sẽ mặc định là True.

  26. anh ơi , em tạo file đăng bài để trong theme rùi nhưng lúc ấn nút tạo bài viết trên trang chủ nó load em thấy đúng link ra trang tạo bài viết rùi mà nó lại báo là trang không tồn tại

  27. Hay quá Vnfaster ơi, nhưng cho mình hỏi: tại sao ko sử dụng luôn thanh công cụ mặc định của wp khi đăng nhập (wp-admin/post-new .php) để đăng bài mà phải tạo ra trang “đăng bài” này?

  28. Ad cho hỏi. Có cách nào thay đổi cái form đăng bài bằng input không nhĩ?. Mình chỉ muốn làm một trang cho thành viên vào viết câu hỏi thôi, không cần nhiều về chức năng soạn thảo. Với lại chỉ định chuyên mục mặc định luôn

    • Được bạn,
      Bạn có thể thay đoạn:

      <?php wp_editor( '', 'userpostcontent', array( 'textarea_name' => 'post_content' ));?>

      Thành:

      <textarea name="post_content" id="post_content" cols="30" rows="10"></textarea>
      • Trước tiên thì mình cảm ơn bạn đã hướng dẫn rất nhiệt tình, mình đã áp dụng và đã thành công, tuy nhiên có 2 chổ mình thấy vẫn chưa được hài lòng mong bạn chỉ giáo.
        1. Tại sao khi để trống các trường rồi gửi bài viết thì vẫn hiển thị thông báo bạn đã đăng bài thành công?.
        2. là sau khi đăng bài thành công mà nhấn nút tải lại trình duyệt là nó lại gửi lại nội dung lúc nẫy mình đăng thêm 1 lần nữa, có cách nào để khi tải lại trình duyệt là cái box đăng bài này nó không gửi tiếp không?

    • Chào bạn,
      Bạn có thể thêm trường post_parent trong wp_insert_post, Ví dụ:

      $post = array(
          'post_title'    => wp_strip_all_tags($post_title),
          'post_content'  => $post_content,
          'post_category' => array($post_category),
          'tags_input'    => $post_tags,
          'post_status'   => $vnstatus,
          'post_parent'   => 'id_cha_ban_muon_them',
          'post_type' => 'post',
      );
      $vnkings_post_id = wp_insert_post($post);

      Trong đó:

      'post_parent'   => 'id_cha_ban_muon_them',

      Chính là phần bạn cần thêm vào.

  29. WOW. bạn viết bài hày quá hay luôn, mình áp dụng thành công rồi, nhưng sao nếu tác giả là người viết bài thì không cho phép tải lên hình ảnh để chèn vào bài viết nhĩ “Xin lỗi, bạn không được quyền đính kèm tập tin vào bài viết này.”

      • E đã test với quyền tác giả, cộng tác, thành viên thì không được, nó báo lỗi Xin lỗi, bạn không được quyền đính kèm tập tin vào bài viết này.” Còn biên tập và admin thì upload được. Mong nhận được giúp đỡ từ anh ạ.

        • Đó là do chưa cấp quyền cho nhóm thành viên đó, bạn có thể thêm đoạn này vào file functions.php

          add_role('contributor', __( 'Cong tac vien' ),
              array(
          		'upload_files'         => true,
          		'delete_posts'         => true,
          		'edit_others_pages'         => true,
          		'edit_posts'         => true,
          		'publish_posts'         => true,
          		'read'         => true,
              )
          );
          
          add_role('nhom_quyen_khac_cua_ban', __( 'Nhom quyen cua ban' ),
              array(
          		'upload_files'         => true,
          		'delete_posts'         => true,
          		'edit_others_pages'         => true,
          		'edit_posts'         => true,
          		'publish_posts'         => true,
          		'read'         => true,
              )
          );
          
    • Chào bác, e cũng đang gặp lỗi này. Quyền Thành viên, cộng tác viên và tác giả đều không cho phép upload file. Bác fix được rồi thì chỉ giúp em với ạ.

      • Bạn thêm đoạn code sau vào file functions của theme nha.
        if ( current_user_can('subscriber') && !current_user_can('upload_files') )
        add_action('admin_init', 'allow_subscriber_uploads');
        function allow_subscriber_uploads() {
        $subscriber = get_role('subscriber');
        $subscriber->add_cap('upload_files');
        }

        Thay subscriber thành nhóm user mà bạn muốn thêm quyền upload file. Sẽ hiển thị button thêm media ở trang đăng bài.

  30. Cảm ơn bạn đã hướng dẫn rất nhiệt tình. Cho mình hỏi ở đoạn code wp_editor để gọi trình soạn thảo wordpress ra, trong trường hợp mình sử dụng Ckeditor thì có được không? và phải sửa code như thế nào. Cảm ơn bạn nhiều

  31. Mình add thành công rồi mà lỗi css ko nhận trong bố cục của theme gốc. Giờ làm sao để nó nằm trong theme như show 1 bài viết bth và có widget right(cột phải)

    • Chào bạn, mình dựng bố cục theo Bootstrap cho phù hợp với các Theme phổ biến hiện nay, Bạn có thể CSS lại form cho phù hợp với giao diện của mình, nếu bạn không thể tự làm có thể gửi tin nhắn tại Page để mình hỗ trợ trực tiếp.

  32. Anh ơi giúp em với ạ, cảm tạ anh luôn. Em làm được hết những gì anh viết ở trên rồi, nói chung là chạy ngon lành cành đào luôn. Nhưng mà trang web của em có một số danh mục không cho thành viên viết vào, vậy chổ chọn danh mục để đăng bài ý có cách nào mình chỉ hiển thị những danh mục mà mình muốn cho thanh viên viết vào không anh nhĩ. như vậy thì code như thế nào hả anh?. Em xin cảm tạ anh rất rất nhiều luôn

    • Chào em, ở trong wp_dropdown_categories
      Có một thuộc tính nữa là: exclude để bỏ danh mục không muốn khi dùng hàm wp_dropdown_categories
      Ví dụ:

      wp_dropdown_categories("echo=0&hide_empty=0&exclude=10");

      Trong đó 10 chính là ID danh mục em không muốn show ra.

  33. Chào anh. anh có thể hướng dẫn chi tiết thêm dùng cái này cho Custom Post Type: san-pham có taxonomy: danh-muc và có sử dụng ACF thì gọi ra như nào ạ

    • Chào bạn,
      Thêm bài vào Post type: san-pham
      Bạn thay

      'post_type' => 'post'

      Thành

      'post_type' => 'san-pham'

      Cho bài vào taxonomy: danh-muc
      Bạn thêm đoạn này vào dưới phần xử lý tạo bài:

      wp_set_object_terms( $vnkings_post_id, array(danh-muc-1,danh-muc-2), 'danh-muc', true);

      Khi gọi ra thì bạn dùng query này để gọi ra các bài của post type và taxonomy đó:

      $vnfasterquery = new WP_Query(array(
      'post_type'=>'san-pham',
      'post_status'=>'publish',
      'orderby' => 'ID',
      'order' => 'DESC',
      'tax_query' => array(
      	array(
      		'taxonomy' => 'danh-muc',
      		'field'    => 'slug',
      		'terms'    => array( 'danh-muc-1', 'danh-muc-2' )
      	),
      ),
      'posts_per_page'=> 10));
      
  34. Bạn còn cách úp album hình ảnh khác không ? Cách ở phần bình luận của hạn nó không nhận úp hình lên được rồi, rảnh giúp mình với hen !

  35. Bạn cho mình hỏi là phần này còn xử lý gì thêm không ? vì làm theo các bước mà vẫn không úp hình lên được thư viện của web. Nếu không làm gì thêm thì bạn kiểm tra lại là code đúng chưa mình sợ bạn thiếu chổ nào đó.

    function fix_file_array(&$files) {
    $names = array(
    'name' => 1,
    'type' => 1,
    'tmp_name' => 1,
    'error' => 1,
    'size' => 1
    );
    foreach ($files as $key => $part) {
    // only deal with valid keys and multiple files
    $key = (string) $key;
    if (isset($names[$key]) && is_array($part)) {
    foreach ($part as $position => $value) {
    $files[$position][$key] = $value;
    }
    // remove old key reference
    unset($files[$key]);
    }
    }
    }

    function insert_attachment($file_handler,$post_id,$setthumb='false') {
    require_once(ABSPATH . "wp-admin" . '/includes/image.php');
    require_once(ABSPATH . "wp-admin" . '/includes/file.php');
    require_once(ABSPATH . "wp-admin" . '/includes/media.php');
    $attach_id = media_handle_sideload( $file_handler, $post_id );
    if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
    return $attach_id;
    }

  36. Bây giờ em muốn tạo thêm 3 nút button bên cạnh Nút đăng bài:
    1. Nút hủy bỏ
    2. Nút Xem thử
    3. Nút lưu nháp
    Thì Custom nó như thế nào vậy anh. Mong anh giúp đở


  37. function add_output( $post )
    {
    $ten_download = get_post_meta( $post->ID, '_ten_download', true );
    $link_download = get_post_meta( $post->ID, '_link_download', true );
    wp_nonce_field( 'save_thongtin', 'thongtin_nonce' );
    // Tạo trường Link Download VIDEO
    echo ( 'VIDEO ' );
    echo ('');
    echo ( 'LINK TẢI' );
    echo ('');
    }

    Em có tạo một cái metapost theo hướng dẫn từ blog của anh thachpham, qua blog của anh đọc mấy bài, em đã tạo thành công bài trang viết bài, quản lý bài..vv cho thành viên, tuy nhiên cái meta post mà em tạo em lại ko biết cách để thêm vào trang viết và sửa bài, anh có thể hướng dẫn cho em làm sao để thêm input meta post vào font viết bài cho thành viên được ko ạ. Em xin chan thành cảm ơn

    • Bạn có thể thêm các input vào:

      <div class="form-group vnking_pd col-md-6">
                <label for="post_tags">Trường của bạn</label>
                <input type="text" name="post_truongcuaban" class="form-control" placeholder="Trường của bạn">
      </div>
      

      Tiếp đến trong phần update dữ liệu.
      Tìm:

      $vnkings_post_id = wp_insert_post($post);

      Thêm vào sau:

      $post_truongcuaban = $_POST['post_truongcuaban'];
      update_post_meta($vnkings_post_id,'post_truongcuaban',$post_truongcuaban);
      

      Chúc bạn thành công!

  38. Ad cho mình hỏi, mình có Custom Fields về vị trí dự án, diện tích, hướng nhà. Mình muốn hiển thị vào trong form để thành viên tự nhập luôn thì thêm như thế nào ạ

  39. Cho hỏi muốn bài đăng sẻ cố định vào 1 hoặc 2 category nào đó mà ko phải là list chọn thì làm thế nào ạ

  40. Chào ad, mình muốn thành viên đăng ký chỉ được đăng tối đa 3 bài viết, Và mỗi bài đăng chỉ được up tối đa 5 hình ảnh vào thư viện thì làm sao ạ. Mình cảm ơn.

Bình luận bài viết

Bạn có thể dùng các thẻ HTML này:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bình luận của bạn sẽ được hiển thị sau khi kiểm duyệt. Cảm ơn bạn đã để lại bình luận!.

Audio truyện full

phàm nhân tu tiên audio

vũ thần chúa tể audio

thế giới hoàn mỹ audio

vô thượng thần đế audio

vạn cổ thần de audio

tiên nghịch audio