Итак, у меня есть этот код:
<?php
global $wpdb;
$table_name = $wpdb->prefix . 'usermeta';
$current_user_id = get_current_user_id();
$Sdoubledata = array($retrieved_data);
foreach($Sdoubledata as $Sdoubledata) {
// Het stuk code hieronder haalt de programma's op uit de database waar de gebruiker al op geabonneerd is.
$retrieve_data = $wpdb->get_results("SELECT * FROM {$table_name} WHERE user_id={$current_user_id} AND meta_key='programma';");
}
echo "<br>";
?>
<!-- Dit stuk code laat de programma's zien waar de radiostation al op geabonneerd is. -->
<br>
<p>De programma's waarop u geabonneerd bent:</p>
<form action="#" enctype="multipart/form-data" method="post">
<?php wp_nonce_field( 'set_programmatest_action', 'set_programmatest' ); ?>
<table>
<?php foreach ( $retrieve_data as $retrieved_data ) { ?>
<tr>
<th>Programma:</th>
<td style="vertical-align: middle;"><?php echo esc_html( $retrieved_data->meta_value ); ?></td>
<th>
<button name="programmatest" type="submit" id="button" value="<?php echo esc_attr( $retrieved_data->meta_value ); ?>">Abonnement opzeggen</button>
</th>
</tr>
<?php }
?>
</table>
</form>
<?php
// Verifieer nonce en sla de data op als de user is ingelogd.
// Nonce docs: https://developer.wordpress.org/themes/theme-security/using-nonces/
if (isset( $_POST['programmatest'] ) && isset( $_POST['set_programmatest'] ) && wp_verify_nonce( $_POST['set_programmatest'], 'set_programmatest_action' )) {
$Data = filter_input( INPUT_POST, 'programmatest', FILTER_SANITIZE_STRING );
$current_user_id = get_current_user_id();
if ( $current_user_id && ! empty( $Data ) ) {
delete_user_meta( $current_user_id, 'programma', $Data );
echo "Uw abonnement op" . ' ' . $Data. ' ' ."is opgezegd.";
//Refresh de pagina
?>
<?php
$page = $_SERVER['PHP_SELF'];
$sec = "2";
?>
<html>
<head>
<meta http-equiv="refresh" content="<?php echo $sec?>;URL='<?php echo $page?>'">
</head>
<body>
<?php
echo ' ' . "U wordt doorverwezen naar de Homepagina";
?>
</body>
</html>
<?php
}
}
?>
<?php
global $wpdb;
$table_name = $wpdb->prefix . 'programma';
// Dit haalt de data op uit de database
$NSdoubledata = array("uitwerkingen", "GoudvanOud");
foreach($NSdoubledata as $NSdoubledata) {
$retrieve_data = $wpdb->get_results( "SELECT Anaam FROM {$table_name}" );
if(in_array($NSdoubledata)) {
echo "Hij doet het!";
} else {
echo "Nee, toch niet.";
}
}
echo "<br>";
?>
<!--De code hier laat de data die opgehaald is zien en laat de programma's zien waar de radiostation op kan abonneren-->
<br>
<p>Programma's waarop u kunt abonneren:</p>
<form action="#" enctype="multipart/form-data" method="post">
<?php wp_nonce_field( 'set_programma_action', 'set_programma' ); ?>
<table>
<?php foreach ( $retrieve_data as $retrieved_data ) { ?>
<tr>
<th>Programma:</th>
<td style="vertical-align: middle;"><?php echo esc_html( $retrieved_data->Anaam ); ?></td>
<th>
<button name="programma" type="submit" value="<?php echo esc_attr( $retrieved_data->Anaam ); ?>">Abonneer</button>
</th>
</tr>
<?php } ?>
</table>
</form>
<?php
// Verifieer nonce en sla de data op als de user is ingelogd.
// Nonce docs: https://developer.wordpress.org/themes/theme-security/using-nonces/
if (isset( $_POST['programma'] ) && isset( $_POST['set_programma'] ) && wp_verify_nonce( $_POST['set_programma'], 'set_programma_action' )) {
$data = filter_input( INPUT_POST, 'programma', FILTER_SANITIZE_STRING );
$current_user_id = get_current_user_id();
if ( $current_user_id && ! empty( $data ) ) {
//voeg de huidige user_id en data toe in de rij met meta_key programma
add_user_meta( $current_user_id, 'programma', $data );
echo "U bent geabonneerd op". ' ' . $data;
}
}
?>
Что я пробовал:
<?php
global $wpdb;
$skip = array($retrieved_data);
if(in_array($retrieved_data, $skip)) {
$table_name = $wpdb->prefix . 'programma';
// This retrieves the data from the database
$retrieve_data = $wpdb->get_results( "SELECT Anaam FROM {$table_name}" );
echo "<br>";
}
?>
Код позволяет пользователю подписаться на программу и отменить свою подписку. Однако, когда пользователь подписался на программу, программы, на которые он / она уже подписан, все еще отображаются в том месте, где он позволяет пользователям подписаться на программу.
Пример:
![enter image description here](https://i.stack.imgur.com/HEzo1.png)
Как вы видите, в первой части пользователь может видеть, на какие программы он или она уже подписан. Во второй части пользователь может выбрать, на какую программу он или она могут подписаться. Поскольку пользователь уже подписан на «uitwerkingen», он не должен видеть в нем возможность подписываться. Я уже искал решение по переполнению стека, но не могу найти какое-либо решение.
Как это исправить?
Структура моей базы данных:
Таблица пользовательских метаданных:
![enter image description here](https://i.stack.imgur.com/4GVJP.png)
таблица программ:
![enter image description here](https://i.stack.imgur.com/2IFty.png)
![enter image description here](https://i.stack.imgur.com/IY3Gt.png)
РЕДАКТИРОВАТЬ
Это первая l oop данных, которые я делаю, чтобы показать все подписанные на программы.
<?php
global $wpdb;
$table_name = $wpdb->prefix . 'usermeta';
$current_user_id = get_current_user_id();
//I made an array containing all the subscribed to programs
$Sdoubledata = array("uitwerkingen", "GoudvanOud");
foreach($Sdoubledata as $Sdoubledata) {
$retrieve_data = $wpdb->get_results("SELECT * FROM {$table_name} WHERE user_id={$current_user_id} AND meta_key='programma';");
if(in_array("uitwerkingen", "GoudvanOud")) {
continue;
}
}
echo "<br>";
?>
А это второй л oop:
<?php
global $wpdb;
$table_name = $wpdb->prefix . 'programma';
// I made an array containing all the programs a user can subscribe to.
$NSdoubledata = array("uitwerkingen", "GoudvanOud");
// I made a foreach which contains the result of the query
foreach($NSdoubledata as $NSdoubledata) {
$retrieve_data = $wpdb->get_results( "SELECT Anaam FROM {$table_name}" );
// I want to output the programs as you told me.
echo ($NSdoubledata);
}
echo "<br>";
?>