Disable page templates if plugin is not installed

Salutare !

Am tot cautat, dar nu am gasit nimic.

Are cineva idee cum as putea dezactiva dropdown-ul ‘Template’ daca plugin-ul x nu este instalat?

Multumesc :smiley:

Fiecare metabox din editor este un „feature” pentru acel post type. Alte features mai sunt: titlu, editorul, thumbnail etc.

Acel dropdown face parte din page-attributes și îl poți șterge așa:

add_action( 'init', function(){
  if( is_plugin_active('advanced-custom-fields-pro/acf.php') ){
    return;
  }
// Post type  ----------------VVV
// Feature-ul pe care îl vrei dezactivat -----VVV
  remove_post_type_support( 'page', 'page-attributes' );
} );

Problema bonus este că în page-attributes intră două lucruri:

  1. Template-urile
  2. menu order (ierarhia)

Cât de mult te afectează… tu știi. Dar probabil nu foarte mult :slight_smile:

Notă despre is_plugin_active

Este posibil ca unele plugin-uri să fie în mai multe variante. ACF, de exemplu, poate fi instalat ori în wp-content/plugins/advanced-custom-fields-pro ori în wp-content/plugins/advanced-custom-fields ori în wp-content/themes/my-theme/acf etc.

Poți să ai un plugin activ fără să-i știi direct path-ul. Poți verifica dacă este activat și altfel: cauți o funcție/clasă/constantă definite în plugin și le verifici pe alea. E.g.:

if( function_exists('acf') ) {}

Multumesc frumos :slight_smile:

Problema este ca pagina isi pastreaza template-ul in cazul in care plugin-ul este dezinstalat intre timp. Nu ar fi fost normal sa reseteze template-ul default?

Eh, presupun că vrei să eviți accesarea paginii când plugin-ul este dezactivat (probabil în acel template folosești ceva funcții din plugin). Dacă asta e situația, poți lăsa în page acel dropdown și doar să încarci template-ul default.

E.g. în my-template.php:


if( !function_exists('acf') ) {
  require_once 'page.php';
  return;
}

// restul template-ului

Va fi doar mai confuz pentru admin :slight_smile:

Ma gandeam la varianta asta, sa fac require de page.php in template-uri, dar am crezut ca poate este vreo varianta sa seteze template-ul default in momentul in care dezactivez dropdown-ul de Template.

Multumesc frumos pentru ajutor :smiley:

Template-ul este setat în post_meta. Poți face ce vrei tu dar doar dacă se dezactivează plugin-ul din wp-admin (sau wp-cli) cu un WP_Query.

Mi se pare o bătaie de cap prea mare :smiley:

Multumesc pentru raspunsuri :slight_smile:

Am procedat in felul urmator: in functions.php am adaugat urmatoarea functie:

function page_templates( $templates ) {
    if ( ! class_exists( 'ACF' ) ) {
        return;
    }
    return $templates;
}
add_filter( 'theme_page_templates', 'page_templates' );

pentru a ascunde dropdown-ul Template in momentul in care ACF nu este activat (sa nu dea impresia utilizatorului ca poate schimba template-ul).

Iar in template am adaugat urmatoarele linii:

image

Multumiri :smiley: